home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / AHADISK.ASM < prev    next >
Assembly Source File  |  1992-09-12  |  88KB  |  4,043 lines

  1.  
  2. PAGE  59,132
  3.  
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                         ██
  6. ;██                    AHADISK                         ██
  7. ;██                                         ██
  8. ;██      Created:   29-Feb-92                             ██
  9. ;██      Passes:    5           Analysis Options on: none             ██
  10. ;██                                         ██
  11. ;██████████████████████████████████████████████████████████████████████████
  12.  
  13. data_1e        equ    0
  14. data_2e        equ    1
  15. data_3e        equ    3
  16. data_4e        equ    94h
  17. keybd_flags_1_    equ    417h
  18. dsk_recal_stat_    equ    43Eh
  19. dsk_motor_stat_    equ    43Fh
  20. dsk_motor_tmr_    equ    440h
  21. video_mode_    equ    449h
  22. video_port_    equ    463h
  23. timer_low_    equ    46Ch
  24. hdsk0_media_st_    equ    490h
  25. data_16e    equ    1000h            ;*
  26. data_17e    equ    0            ;*
  27. data_18e    equ    3            ;*
  28. data_234e    equ    7C3Eh            ;*
  29.  
  30. ;--------------------------------------------------------------    seg_a  ----
  31.  
  32. seg_a        segment    byte public
  33.         assume cs:seg_a , ds:seg_a
  34.  
  35.  
  36. ;██████████████████████████████████████████████████████████████████████████
  37. ;
  38. ;            Program Entry Point
  39. ;
  40. ;██████████████████████████████████████████████████████████████████████████
  41.  
  42.  
  43. ahadisk        proc    far
  44.  
  45. start:
  46.         jmp    loc_262
  47. data_24        db    0, 0
  48. data_25        dw    0
  49. data_26        dw    0
  50. data_27        dw    0
  51. data_28        db    0
  52. data_29        db    0
  53. data_30        db    0
  54.         db    0
  55. data_31        dw    1
  56. data_32        db    19h
  57.         db    0
  58. data_33        db    ' ', 0
  59.         db    27h, 0
  60.         db    '.', 0
  61.         db    ' 360 K', 0
  62.         db    ' 1.2 M', 0
  63.         db    ' 720 K', 0
  64.         db    '1.44 M', 0
  65. data_37        db    0FFh
  66.         db     11h,0FFh
  67. data_38        db    1Dh
  68.         db    0FFh, 11h,0FFh, 23h
  69. data_39        db    1
  70.         db    0, 2, 0
  71. data_40        db    23h
  72.         db     00h, 3Bh, 00h, 23h, 00h, 47h
  73.         db     00h
  74. data_41        db    2
  75.         db    1, 2
  76. data_42        db    1
  77. data_43        db    0DFh
  78.         db    0DFh,0DFh,0AFh
  79. data_44        db    9
  80.         db     0Fh, 09h, 12h
  81. data_45        db    2Ah
  82.         db     1Bh, 2Ah, 1Ah
  83. data_46        db    50h
  84.         db     54h, 50h, 6Ch
  85. data_47        db    0FDh
  86.         db    0F9h,0F9h,0F0h
  87. data_48        db    70h
  88.         db    0
  89.         db    0E0h, 00h
  90.  
  91. locloop_2:
  92.         jo    loc_3            ; Jump if overflow=1
  93. loc_3:
  94.         loopnz    $+2            ; Loop if zf=0, cx>0
  95.  
  96.         rol    byte ptr [bp+si],1    ; Rotate
  97.         db     60h, 09h,0A0h, 05h, 40h, 0Bh
  98. data_50        db    2
  99.         db    0, 7, 0, 3, 0, 9
  100.         db    0
  101. data_51        db    62h
  102.         db     01h, 43h, 09h,0C9h, 02h, 1Fh
  103.         db     0Bh
  104. data_52        db    6
  105.         db    1, 4, 3
  106. data_53        db    0
  107. data_54        dw    0
  108. data_55        db    0
  109. data_56        db    0
  110. data_57        db    2Ah
  111. data_58        db    50h
  112. data_59        db    0
  113. data_60        db    0, 0
  114. data_61        dw    0
  115. data_62        db    0
  116. data_63        db    0
  117. data_64        db    0
  118. data_65        db    0
  119. data_66        db    0
  120. data_67        dw    0
  121. data_68        dw    0
  122. data_69        db    0
  123. data_70        db    0
  124. data_71        db    0
  125. data_72        db    0
  126. data_73        db    0
  127. data_74        db    0
  128. data_75        db    0
  129. data_76        db    0
  130. data_77        db    0
  131. data_78        db    0
  132. data_79        db    0
  133. data_80        db    0
  134. data_81        dw    130Dh
  135. data_82        dw    0
  136. data_84        dw    0
  137. data_85        dw    0
  138. data_86        dw    0
  139. data_87        dw    0
  140. data_88        dw    0
  141. data_89        dw    0
  142. data_90        dw    0
  143. data_91        dw    0
  144. data_92        dw    0
  145. data_93        dw    0
  146. data_94        db    0
  147. data_95        db    0
  148. data_96        db    0Bh
  149. data_97        db    0
  150. data_98        db    0, 0
  151. data_99        db    0
  152. data_100    dw    0
  153. data_101    db    0
  154. data_102    db    0
  155. data_103    db    0
  156. data_104    db    0
  157. data_105    dw    0
  158. data_106    dw    0
  159. data_107    db    0
  160. data_108    db    0
  161. data_109    db    0
  162. data_110    db    6
  163. data_111    db    0A0h
  164. data_112    db    0
  165. data_113    db    0
  166.         db    11 dup (0)
  167. data_115    db    0
  168.         db    9 dup (0)
  169.  
  170. ahadisk        endp
  171.  
  172. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  173. ;                   SUBROUTINE
  174. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  175.  
  176. sub_2        proc    near
  177.         add    [bx+si],al
  178.         add    [bx+si],al
  179.         add    [bx+si],al
  180.         add    [bx+si],al
  181.         add    [bx+si],al
  182.         add    [bx+si],al
  183.         add    [bx+si],al
  184.         add    [bx+si],al
  185.         add    [bx+si],al
  186.         add    [bx+si],al
  187.         add    [bx+si],al
  188.         add    [bx+si],al
  189.         add    [bx+si],al
  190.         add    [bx+si],al
  191.         add    [bx+si],al
  192.         add    [bx+si],al
  193.         add    [bx+si],al
  194.         add    [bx+si],al
  195.         add    [bx+si],al
  196.         add    [bx+si],al
  197.         add    [bx+si],al
  198.         add    [bx+si],al
  199.         add    [bx+si],al
  200.         add    [bx+si],al
  201.         add    [bx+si],al
  202.         add    [bx+si],al
  203.         add    [bx+si],al
  204.         add    [bx+si],al
  205.         add    [bx+si],al
  206.         add    [bx+si],al
  207.         add    [bx+si],al
  208.         add    [bx+si],al
  209.         add    [bx+si],al
  210.         add    [bx+si],al
  211.         add    [bx+si],al
  212.         add    [bx+si],al
  213.         add    [bx+si],al
  214.         add    [bx+si],al
  215.         add    [bx+si],al
  216.         add    [bx+si],al
  217.         add    [bx+si],al
  218.         add    [bx+si],al
  219.         add    [bx+si],al
  220.         add    [bx+si],al
  221.         add    [bx+si],al
  222.         add    [bx+si],al
  223.         add    [bx+si],al
  224.         add    [bx+si],al
  225.         add    [bx+si],al
  226.         add    [bx+si],al
  227.         add    [bx+si],al
  228.         add    [bx+si],al
  229.         add    [bx+si],al
  230.         add    [bx+si],al
  231.         add    [bx+si],al
  232.         add    [bx+si],al
  233.         add    [bx+si],al
  234.         add    [bx+si],al
  235.         add    [bx+si],al
  236.         add    [bx+si],al
  237.         add    [bx+si],al
  238.         add    [bx+si],al
  239.         add    [bx+si],al
  240.         add    [bx+si],al
  241.         add    [bx+si],al
  242.         add    [bx+si],al
  243.         add    [bx+si],al
  244.         add    [bx+si],al
  245.         add    [bx+si],al
  246.         add    [bx+si],al
  247.         add    [bx+si],al
  248.         add    [bx+si],al
  249.         add    [bx+si],al
  250.         add    [bx+si],al
  251.         add    [bx+si],al
  252.         add    [bx+si],al
  253.         add    [bx+si],al
  254.         add    [bx+si],al
  255.         add    [bx+si],al
  256.         add    [bx+si],al
  257.         add    [bx+si],al
  258.         add    [bx+si],al
  259.         add    [bx+si],al
  260.         add    [bx+si],al
  261.         add    [bx+si],al
  262.         add    [bx+si],al
  263.         add    [bx+si],al
  264.         add    [bx+si],al
  265.         add    [bx+si],al
  266.         add    [bx+si],al
  267.         add    [bx+si],al
  268.         add    [bx+si],al
  269.         add    [bx+si],al
  270.         add    [bx+si],al
  271.         add    [bx+si],al
  272.         add    [bx+si],al
  273.         add    [bx+si],al
  274.         add    [bx+si],al
  275.         add    [bx+si],al
  276.         add    [bx+si],al
  277.         add    [bx+si],al
  278.         add    [bx+si],al
  279.         add    [bx+si],al
  280.         add    [bx+si],al
  281.         add    [bx+si],al
  282.         add    [bx+di],al
  283.         add    [bx],cl
  284.         add    [bx+di],al
  285.         add    [bp+si],cl
  286.         add    [si+0],ah
  287. ;*        call    sub_5            ;*
  288.         db    0E8h, 03h, 10h
  289.         daa                ; Decimal adjust
  290.         mov    al,byte ptr ds:[4086h]
  291.         inc    dx
  292.         add    [bx+si],al
  293.         add    [bx+si],al
  294.         add    [bx+si],al
  295.         add    [bx+si],al
  296.         add    [bx+si],al
  297.         ja    $+7            ; Jump if above
  298.         add    [bx+si],al
  299.         add    [bx+si],al
  300.         pop    dx
  301.         xor    ax,355Ah
  302.         pop    dx
  303.         xor    ax,577h
  304.         add    [bx+si],al
  305.  
  306. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  307.  
  308. sub_3:
  309.         add    [bx+si],al
  310.         add    [bx+si],al
  311.         add    [bx+si],al
  312.         pop    dx
  313.         xor    ax,0
  314.         add    [bx+si],al
  315.         add    [bx+si],al
  316.         pop    dx
  317.         xor    ax,0
  318.         add    [bx+si],al
  319.         add    [bx+si],al
  320.         add    [bx+si],al
  321.         add    [bx+si],al
  322.         add    [bx+si],al
  323.         add    [bx+si],al
  324.         add    [bx+si],al
  325.         add    [bx+si],al
  326.         pop    dx
  327.         xor    ax,577h
  328.         pop    dx
  329.         xor    ax,0
  330.         add    [bx+si],al
  331.         add    [bx+si],al
  332.         add    [bx+si],al
  333.         add    [bx+si],al
  334.         add    [bx+si],al
  335.         add    [bx+si],al
  336.         add    [bx+si],al
  337.         add    [bx+si],al
  338.         add    bh,dh
  339. ;*        pop    cs            ; Dangerous 8088 only
  340.         db    0Fh
  341. ;*        jo    loc_4            ;*Jump if overflow=1
  342.         db     70h,0FFh
  343.         add    [bx+si],al
  344.         add    [bx+si],al
  345.         add    [bx+si],al
  346.         add    [bx+si],al
  347.         add    [di+6Eh],al
  348.         jz    loc_5            ; Jump if zero
  349.         jc    $+22h            ; Jump if carry Set
  350.         inc    sp
  351.         jc    $+6Bh            ; Jump if carry Set
  352.         jbe    loc_6            ; Jump if below or =
  353.         and    [si+6Fh],dl
  354.         and    [bp+si+65h],al
  355.         and    [bp+6Fh],al
  356.         jc    $+6Fh            ; Jump if carry Set
  357.         db     61h, 74h, 20h, 3Fh, 20h, 5Bh
  358.         db    'A'
  359.         db     5Dh, 00h
  360.         db    'Enter Drive Type ? (0 - 360K, 1 '
  361.         db    '- 1.2M)  [0]'
  362.         db    0
  363.         db    'Enter Drive Type ? (0 - 720K,'
  364. loc_5:
  365.         and    [bx+di],dh
  366.         and    [di],ch
  367.         and    [bx+di],dh
  368. loc_6:
  369.         db    '.44M) [0]'
  370.         db    0
  371.         db    'Number Of Diskette To Be Format '
  372.         db    '(1-11) ['
  373. data_182    dw    3131h
  374.         db     5Dh, 20h, 3Fh, 20h, 00h
  375.         db    'Insert New Diskette Into Drive '
  376. data_183    db    41h
  377.         db    0
  378.         db    'Press ENTER To Start Format Or E'
  379.         db    'SC To Abort'
  380.         db    0
  381.         db    'Can', 27h, 't Release From Memor'
  382.         db    'y, Interrupt Vector Address Been'
  383.         db    ' Changed'
  384.         db    0
  385.         db    'Press Any Key To Return To Main '
  386.         db    'Menu'
  387.         db    0
  388.         db    'No Format Report !'
  389.         db     00h, 00h, 00h, 00h, 00h, 2Dh
  390.         db     00h, 00h, 00h, 00h, 00h
  391.         db     43h, 70h
  392. data_184    db    'HpApNpGpEpEpRpRpOpRp!pFpIpNpIpSp'
  393.         db    'Hp p p', 0
  394.         db    'p', 0
  395.         db    'p p pDisk Not Ready !', 0
  396.         db    'Disk Write Protected !', 0
  397.         db    'Seek Error !', 0
  398.         db    'Abort or Retry ?', 0
  399.         db    'Track 0 Bad, Diskette Unusable !'
  400.         db    0
  401.         db    'Program Interrupted !', 0
  402.         db    'Ready Printer, Press ENTER When '
  403.         db    'Ready !', 0
  404.         db    'Printing ....', 0
  405.         db    'I/O Error !', 0
  406.         db    'Printer Not Ready !', 0
  407.         db    0C9h, 01h, 4Eh,0CDh,0BBh,0BAh
  408.         db     01h, 4Eh, 20h,0BAh,0BAh, 01h
  409.         db     13h, 20h,0ADh
  410.         db    'aHa/nBa!Mem Resident Format '
  411.         db    1, 3
  412.         db    ' Version 6.9'
  413.         db     01h, 10h, 20h,0BAh,0BAh, 01h
  414.         db     4Eh, 20h,0BAh,0CCh, 01h
  415.         db     4Eh,0CDh,0B9h,0BAh, 01h, 4Eh
  416.         db     20h
  417.         db    0BAh,0BAh, 01h, 4Eh, 20h,0BAh
  418.         db    0BAh, 01h, 4Eh, 20h,0BAh,0BAh
  419.         db     01h, 4Eh, 20h,0BAh,0BAh, 01h
  420.         db     4Eh, 20h,0BAh,0BAh, 01h, 4Eh
  421.         db     20h,0BAh,0BAh, 01h, 4Eh, 20h
  422.         db    0BAh,0BAh, 01h, 4Eh, 20h,0BAh
  423.         db    0BAh, 01h, 4Eh, 20h,0BAh,0BAh
  424.         db     01h, 4Eh, 20h,0BAh,0BAh, 01h
  425.         db     4Eh, 20h,0BAh,0BAh, 01h, 4Eh
  426.         db     20h,0BAh,0BAh, 01h, 4Eh, 20h
  427.         db    0BAh
  428.         db    0BAh, 01h, 4Eh, 20h,0BAh,0BAh
  429.         db     01h, 4Eh, 20h,0BAh,0BAh, 01h
  430.         db    4Eh
  431.         db     20h,0BAh,0BAh, 01h, 4Eh, 20h
  432.         db    0BAh,0BAh, 01h, 4Eh, 20h,0BAh
  433.         db    0BAh, 01h
  434.         db     4Eh, 20h
  435.         db    0BAh,0C8h, 01h, 4Eh,0CDh,0BCh
  436.         db     01h, 87h,0D0h, 1Fh,0C9h, 01h
  437.         db     4Eh,0CDh,0BBh,0BAh, 01h, 4Eh
  438.         db     20h,0BAh,0BAh, 01h, 13h, 20h
  439.         db    0ADh
  440.         db    'aHa/nBa!Mem Resident Format '
  441.         db    1, 3
  442.         db    ' Version 6.9'
  443.         db     01h, 10h, 20h,0BAh,0BAh, 01h
  444.         db     4Eh, 20h,0BAh,0CCh, 01h
  445.         db     4Eh,0CDh,0B9h,0BAh, 01h, 1Ch
  446.         db     20h
  447.         db    0DAh, 01h, 15h,0C4h,0BFh, 01h
  448.         db     1Bh, 20h,0BAh,0BAh, 01h, 1Ch
  449.         db     20h,0B3h
  450.         db    ' Print Out '
  451.         db    0ADh
  452.         db    'aHa/nBa! '
  453.         db    0B3h, 01h, 1Bh, 20h,0BAh,0BAh
  454.         db     01h, 1Ch, 20h,0C0h, 01h, 15h
  455.         db    0C4h,0D9h, 01h, 1Bh, 20h,0BAh
  456.         db    0BAh, 01h, 1Ch, 20h,0DAh, 01h
  457.         db     15h,0C4h
  458.         db    0BFh, 01h, 1Bh, 20h,0BAh,0BAh
  459.         db     01h, 1Ch, 20h,0B3h, 01h, 04h
  460.         db    ' Start format'
  461.         db     01h, 05h, 20h,0B3h, 01h, 1Bh
  462.         db     20h,0BAh,0BAh, 01h, 1Ch, 20h
  463.         db    0C0h, 01h, 15h,0C4h,0D9h, 01h
  464.         db     1Bh, 20h,0BAh,0BAh, 01h, 1Ch
  465.         db     20h,0DAh, 01h, 15h,0C4h,0BFh
  466.         db     01h, 1Bh, 20h,0BAh,0BAh, 01h
  467.         db     1Ch, 20h,0B3h, 01h, 04h
  468.         db    ' Format report'
  469.         db     01h, 04h, 20h,0B3h, 01h, 1Bh
  470.         db     20h,0BAh,0BAh, 01h, 1Ch, 20h
  471.         db    0C0h, 01h, 15h,0C4h,0D9h, 01h
  472.         db     1Bh, 20h,0BAh,0BAh, 01h, 1Ch
  473.         db     20h,0DAh, 01h, 15h,0C4h,0BFh
  474.         db     01h, 1Bh, 20h,0BAh,0BAh, 01h
  475.         db     1Ch, 20h,0B3h
  476.         db    '  Track display o'
  477. data_187    dw    206Eh
  478.         db     20h, 20h,0B3h, 01h, 1Bh, 20h
  479.         db    0BAh,0BAh, 01h, 1Ch, 20h,0C0h
  480.         db     01h, 15h,0C4h,0D9h, 01h, 1Bh
  481.         db     20h,0BAh,0BAh, 01h, 1Ch, 20h
  482.         db    0DAh, 01h, 15h,0C4h,0BFh, 01h
  483.         db     1Bh, 20h,0BAh,0BAh, 01h, 1Ch
  484.         db     20h,0B3h
  485.         db    ' Release from memory '
  486.         db    0B3h, 01h, 1Bh, 20h,0BAh,0BAh
  487.         db     01h, 1Ch, 20h,0C0h, 01h, 15h
  488.         db    0C4h,0D9h, 01h, 1Bh, 20h,0BAh
  489.         db    0BAh, 01h, 1Ch, 20h,0DAh, 01h
  490.         db     15h,0C4h,0BFh, 01h, 1Bh, 20h
  491.         db    0BAh,0BAh, 01h, 1Ch, 20h,0B3h
  492.         db     01h, 09h, 20h, 45h, 78h, 69h
  493.         db     74h, 01h, 08h, 20h,0B3h, 01h
  494.         db     1Bh, 20h,0BAh,0BAh, 01h, 1Ch
  495.         db     20h,0C0h, 01h, 15h,0C4h,0D9h
  496.         db     01h, 1Bh, 20h,0BAh,0BAh, 01h
  497.         db     4Eh, 20h,0BAh,0C8h, 01h, 4Eh
  498.         db    0CDh,0BCh, 01h, 87h,0D0h, 1Fh
  499.         db    0C9h, 01h, 4Eh,0CDh,0BBh,0BAh
  500.         db     01h, 4Eh, 20h,0BAh,0BAh, 01h
  501.         db     13h, 20h,0ADh
  502.         db    'aHa/nBa!Mem Resident Format '
  503.         db    1, 3
  504.         db    ' Version 6.9'
  505.         db     01h, 10h, 20h,0BAh,0BAh, 01h
  506.         db     4Eh, 20h,0BAh,0CCh, 01h
  507.         db    4Eh
  508.         db    0CDh,0B9h,0BAh, 01h, 4Eh, 20h
  509.         db    0BAh,0BAh, 01h, 4Eh, 20h,0BAh
  510.         db    0BAh, 01h, 4Eh, 20h,0BAh,0BAh
  511.         db     01h, 4Eh, 20h,0BAh,0BAh, 01h
  512.         db     4Eh, 20h,0BAh,0BAh, 01h, 4Eh
  513.         db     20h,0BAh,0BAh, 01h, 4Eh, 20h
  514.         db    0BAh,0BAh, 01h, 4Eh, 20h,0BAh
  515.         db    0BAh, 01h, 4Eh, 20h,0BAh,0BAh
  516.         db     01h, 4Eh, 20h,0BAh,0BAh, 01h
  517.         db     4Eh, 20h,0BAh,0BAh, 01h, 4Eh
  518.         db     20h,0BAh,0BAh, 01h, 4Eh, 20h
  519.         db    0BAh
  520.         db    0BAh, 01h, 4Eh, 20h,0BAh,0BAh
  521.         db     01h, 4Eh, 20h,0BAh,0CCh, 01h
  522.         db     17h
  523.         db    0CDh,0D1h, 01h, 0Fh,0CDh,0D1h
  524.         db     01h, 10h,0CDh,0D1h, 01h, 15h
  525.         db    0CDh,0B9h,0BAh, 01h
  526.         db    3
  527.         db    ' Drive To Be Format  '
  528.         db    0B3h, 01h, 03h
  529.         db    ' Drive Type  '
  530.         db    0B3h
  531.         db    '  Diskette No.  '
  532.         db    0B3h
  533.         db    '  Total Diskette(s)  '
  534.         db    0BAh,0C7h, 01h, 17h,0C4h,0C5h
  535.         db     01h, 0Fh,0C4h,0C5h, 01h, 10h
  536.         db    0C4h,0C5h, 01h, 15h,0C4h,0B6h
  537.         db    0BAh, 01h, 0Bh
  538.         db    20h
  539. data_188    db    41h
  540.         db     01h, 0Bh, 20h,0B3h, 01h, 05h
  541.         db     20h
  542. data_189    db    31h
  543.         db     2Eh, 34h, 34h, 20h, 4Dh, 01h
  544.         db     04h, 20h,0B3h, 01h, 06h
  545.         db    20h
  546. data_190    dw    3120h
  547.         db     01h, 08h, 20h,0B3h, 01h
  548.         db     09h, 20h
  549. data_191    dw    3131h
  550.         db    1
  551.         db     0Ah, 20h,0BAh,0C8h, 01h
  552.         db     17h,0CDh,0CFh, 01h, 0Fh,0CDh
  553.         db    0CFh, 01h, 10h,0CDh,0CFh, 01h
  554.         db     15h,0CDh,0BCh, 01h, 87h,0D0h
  555.         db     1Fh,0C9h, 01h, 4Eh,0CDh,0BBh
  556.         db    0BAh, 01h, 4Eh, 20h,0BAh,0BAh
  557.         db     01h, 13h
  558.         db    ' Background Diskette Formatter S'
  559.         db    'tatus Report'
  560.         db     01h, 10h, 20h,0BAh,0BAh, 01h
  561.         db     4Eh, 20h,0BAh,0BAh, 01h, 4Eh
  562.         db     20h,0BAh,0CCh, 01h, 0Ch,0CDh
  563.         db    0D1h
  564.         db     01h, 15h,0CDh,0D1h, 01h, 11h
  565.         db    0CDh
  566.         db    0D1h, 01h, 19h,0CDh,0B9h,0BAh
  567.         db    '  Diskette  '
  568.         db    0B3h, 01h, 07h, 20h, 56h, 6Fh
  569.         db     6Ch, 75h, 6Dh, 65h, 01h, 08h
  570.         db     20h,0B3h, 01h, 05h, 20h, 4Eh
  571.         db     6Fh, 2Eh, 20h, 4Fh, 66h, 01h
  572.         db     06h, 20h,0B3h, 01h, 04h
  573.         db    ' Total Disk Space'
  574.         db     01h, 05h, 20h,0BAh,0BAh, 01h
  575.         db     05h, 20h, 4Eh, 6Fh, 2Eh, 01h
  576.         db     04h, 20h,0B3h, 01h, 04h
  577.         db    ' Serial Number'
  578.         db     01h, 04h, 20h,0B3h
  579.         db    '  Bad Cluster(s) '
  580.         db    0B3h, 01h
  581.         db    8, ' In Bytes'
  582.         db     01h, 09h, 20h,0BAh,0C7h, 01h
  583.         db     0Ch,0C4h,0C5h, 01h, 15h,0C4h
  584.         db    0C5h, 01h, 11h,0C4h,0C5h, 01h
  585.         db     19h,0C4h,0B6h
  586.         db    0BAh, 01h, 0Ch, 20h
  587.         db    0B3h, 01h, 15h
  588.         db     20h,0B3h, 01h, 11h, 20h,0B3h
  589.         db     01h, 19h, 20h,0BAh,0BAh, 01h
  590.         db     0Ch, 20h,0B3h, 01h, 15h, 20h
  591.         db    0B3h, 01h, 11h, 20h,0B3h, 01h
  592.         db     19h, 20h,0BAh,0BAh, 01h, 0Ch
  593.         db     20h,0B3h, 01h, 15h, 20h,0B3h
  594.         db     01h, 11h, 20h,0B3h, 01h, 19h
  595.         db     20h,0BAh,0BAh, 01h, 0Ch, 20h
  596.         db    0B3h, 01h, 15h, 20h,0B3h, 01h
  597.         db     11h
  598.         db    20h
  599.         db    0B3h, 01h, 19h, 20h,0BAh,0BAh
  600.         db     01h, 0Ch, 20h,0B3h, 01h, 15h
  601.         db     20h,0B3h, 01h, 11h, 20h,0B3h
  602.         db     01h, 19h, 20h,0BAh,0BAh, 01h
  603.         db     0Ch, 20h,0B3h, 01h, 15h, 20h
  604.         db    0B3h, 01h, 11h, 20h,0B3h, 01h
  605.         db     19h, 20h,0BAh,0BAh, 01h, 0Ch
  606.         db     20h,0B3h, 01h, 15h, 20h,0B3h
  607.         db     01h, 11h, 20h,0B3h, 01h, 19h
  608.         db     20h,0BAh,0BAh, 01h, 0Ch, 20h
  609.         db    0B3h, 01h, 15h, 20h,0B3h, 01h
  610.         db     11h, 20h,0B3h, 01h, 19h, 20h
  611.         db    0BAh,0BAh, 01h, 0Ch, 20h,0B3h
  612.         db     01h, 15h, 20h,0B3h, 01h, 11h
  613.         db     20h,0B3h, 01h, 19h, 20h,0BAh
  614.         db    0BAh, 01h, 0Ch, 20h,0B3h, 01h
  615.         db     15h, 20h,0B3h, 01h, 11h, 20h
  616.         db    0B3h, 01h, 19h, 20h,0BAh,0BAh
  617.         db     01h, 0Ch, 20h,0B3h, 01h, 15h
  618.         db     20h,0B3h, 01h, 11h, 20h,0B3h
  619.         db     01h, 19h, 20h,0BAh,0CCh, 01h
  620.         db     0Ch,0CDh,0CFh, 01h, 15h,0CDh
  621.         db    0CFh, 01h, 11h,0CDh,0CFh, 01h
  622.         db     19h,0CDh,0B9h,0BAh, 01h, 4Eh
  623.         db     20h,0BAh,0BAh, 01h, 15h
  624.         db     20h, 50h
  625.         db    'ress Any Key To Return To Main M'
  626.         db    'enu'
  627.         db     01h, 15h, 20h,0BAh,0BAh, 01h
  628.         db     4Eh, 20h,0BAh,0C8h, 01h, 4Eh
  629.         db    0CDh,0BCh, 01h, 87h,0D0h, 1Fh
  630.         db     0Dh, 0Ah, 0Dh, 0Ah, 20h
  631.         db    9 dup (20h)
  632.         db    0ADh
  633.         db    'aHa/nBa! Application Form!      '
  634.         db    '                          ', 0Dh
  635.         db    0Ah, 'What file is this?', 0Dh, 0Ah
  636.         db    '                      Where Did '
  637.         db    'you get it from?', 0Dh, 0Ah, '  '
  638.         db    '                  Handle:', 0Dh, 0Ah
  639.         db    '       Phone #:', 0Dh, 0Ah, '   '
  640.         db    '   ', 0Dh, 0Ah, '               '
  641.         db    '               List 3 boards whe'
  642.         db    're you could be reached at:    ', 0Dh
  643.         db    0Ah, 0Dh, 0Ah, '                 '
  644.         db    '                           Can y'
  645.         db    'ou HaCK?', 0Dh, 0Ah, '          '
  646.         db    '                       List a fe'
  647.         db    'w thigs you', 27h, 've hacked:', 0Dh
  648.         db    0Ah, 0Dh, 0Ah, '                 '
  649.         db    '            Ok! Send MoneY, pft,'
  650.         db    ' and this letter to:', 0Dh, 0Ah, ' '
  651.         db    '                     Psycho', 0Dh
  652.         db    0Ah, '        1340 W Irving', 0Dh
  653.         db    0Ah, ' #229', 0Dh, 0Ah, '        '
  654.         db    '  Chicago, IL', 0Dh, 0Ah, '   60'
  655.         db    '613', 0Dh, 0Ah, '               '
  656.         db    '                          Ok! No'
  657.         db    'w, write about yourself:        '
  658.         db    '                                '
  659.         db    '                                '
  660.         db    '                                '
  661.         db    '                                '
  662.         db    '                                '
  663.         db    '                                '
  664.         db    '                                '
  665.         db    '                                '
  666.         db    '                                '
  667.         db    '                                '
  668.         db    '                                '
  669.         db    '                                '
  670.         db    '                                '
  671.         db    '                                '
  672.         db    '                                '
  673.         db    '                                '
  674.         db    '                                '
  675.         db    '                                '
  676.         db    '                                '
  677.         db    '                                '
  678.         db    '                                '
  679.         db    '                                '
  680.         db    '                                '
  681.         db    '                                '
  682.         db    '                                '
  683.         db    '                                '
  684.         db    '                                '
  685.         db    '                                '
  686.         db    '                                '
  687.         db    '                                '
  688.         db    '                                '
  689.         db    '                                '
  690.         db    '                                '
  691.         db    '                                '
  692.         db    '                                '
  693.         db    '                                '
  694.         db    '                                '
  695.         db    '                                '
  696.         db    '                                '
  697.         db    '                                '
  698.         db    '                                '
  699.         db    '        ', 0Ch, 0
  700.         db    '.'
  701.         db     80h, 3Eh, 2Dh, 02h, 00h, 74h
  702.         db     08h, 2Eh,0FEh, 0Eh, 2Dh, 02h
  703.         db    0EBh, 09h, 90h
  704.         db     2Eh,0F6h, 06h, 2Eh, 02h, 80h
  705.         db     75h, 05h
  706. loc_32:
  707.         jmp    dword ptr cs:[195h]
  708. loc_33:
  709.         mov    word ptr cs:[1EAh],ax
  710.         mov    al,0Bh
  711.         out    20h,al            ; port 20h, 8259-1 int command
  712.         jmp    short $+2        ; delay for I/O
  713.         in    al,20h            ; port 20h, 8259-1 int IRR/ISR
  714.         and    al,0FEh
  715.         mov    ax,word ptr cs:[1EAh]
  716.         jz    loc_34            ; Jump if zero
  717.         jmp    short loc_32
  718. loc_34:
  719.         mov    word ptr cs:[1FCh],ax
  720.         mov    word ptr cs:[1FEh],bx
  721.         mov    word ptr cs:[208h],sp
  722.         mov    word ptr cs:[20Eh],ss
  723.         mov    word ptr cs:[20Ch],ds
  724.         mov    word ptr cs:[210h],es
  725.         mov    word ptr cs:[20Ah],bp
  726.         mov    word ptr cs:[204h],si
  727.         mov    word ptr cs:[206h],di
  728.         mov    word ptr cs:[200h],cx
  729.         mov    word ptr cs:[202h],dx
  730.         mov    ds,word ptr cs:[1E2h]
  731.         mov    ss,word ptr ds:[1DAh]
  732.         mov    sp,word ptr ds:[1DCh]
  733.         mov    es,word ptr ds:[1E4h]
  734.         mov    bp,word ptr ds:[1E0h]
  735.         mov    si,word ptr ds:[1D8h]
  736.         mov    di,word ptr ds:[1DEh]
  737.         mov    ax,word ptr ds:[1D0h]
  738.         mov    bx,word ptr ds:[1D2h]
  739.         mov    cx,word ptr ds:[1D4h]
  740.         mov    dx,word ptr ds:[1D6h]
  741.         jmp    dword ptr cs:[195h]
  742.         mov    word ptr cs:[1F8h],ds
  743.         mov    word ptr cs:[1F6h],ax
  744.         mov    word ptr cs:[1FAh],bx
  745.         mov    ds,cs:data_25
  746.         mov    bx,keybd_flags_1_
  747.         mov    ah,[bx]
  748.         and    ah,0Fh
  749.         cmp    ah,0Bh
  750.         jne    loc_36            ; Jump if not equal
  751.         test    byte ptr cs:[22Eh],0C0h
  752.         jz    loc_35            ; Jump if zero
  753.         test    byte ptr cs:[22Eh],40h    ; '@'
  754.         jz    loc_36            ; Jump if zero
  755.         or    byte ptr cs:[22Eh],20h    ; ' '
  756.         jmp    short loc_36
  757.         db    90h
  758. loc_35:
  759.         or    byte ptr cs:[22Eh],80h
  760. loc_36:
  761.         mov    ax,word ptr cs:[1F6h]
  762.         mov    ds,word ptr cs:[1F8h]
  763.         mov    bx,word ptr cs:[1FAh]
  764.         jmp    dword ptr cs:[199h]
  765.         db     2Eh, 80h, 3Eh, 2Fh, 02h, 00h
  766.         db     74h, 0Dh, 2Eh,0C6h, 06h, 2Fh
  767.         db     02h, 00h, 50h,0B0h, 66h,0E6h
  768.         db     20h, 58h,0CFh
  769. loc_37:
  770.         jmp    dword ptr cs:[19Dh]
  771.         test    dl,80h
  772.         jnz    loc_38            ; Jump if not zero
  773.         test    byte ptr cs:[22Eh],40h    ; '@'
  774.         jz    loc_38            ; Jump if zero
  775.         mov    word ptr cs:[1EAh],ax
  776.         pop    ax
  777.         pop    ax
  778.         pop    ax
  779.         or    ax,1
  780.         push    ax
  781.         sub    sp,4
  782.         mov    ax,word ptr cs:[1EAh]
  783.         mov    ah,80h
  784.         iret                ; Interrupt return
  785. sub_2        endp
  786.  
  787.  
  788. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  789. ;                   SUBROUTINE
  790. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  791.  
  792. sub_6        proc    near
  793. loc_38:
  794.         jmp    dword ptr cs:[1A1h]
  795.         mov    byte ptr ds:[22Eh],40h    ; '@'
  796.         call    sub_28
  797.         jnc    loc_40            ; Jump if carry=0
  798.         clc                ; Clear carry flag
  799. loc_39:
  800.         call    sub_11
  801.         jmp    loc_121
  802. loc_40:
  803.         mov    ds,data_25
  804.         test    byte ptr ds:dsk_motor_stat_,0Fh
  805.         push    cs
  806.         pop    ds
  807.         jnz    loc_39            ; Jump if not zero
  808.         call    sub_22
  809.         call    sub_23
  810. loc_41:
  811.         mov    ax,55Ch
  812.         mov    cs:data_93,ax
  813.         call    sub_21
  814.         mov    data_112,70h        ; 'p'
  815.         call    sub_27
  816.         call    sub_13
  817. loc_42:
  818.         mov    ah,0
  819.         int    16h            ; Keyboard i/o  ah=function 00h
  820.                         ;  get keybd char in al, ah=scan
  821.         cmp    al,1Bh
  822.         je    loc_48            ; Jump if equal
  823.         cmp    al,0Dh
  824.         je    loc_49            ; Jump if equal
  825.         cmp    ah,48h            ; 'H'
  826.         je    loc_50            ; Jump if equal
  827.         cmp    ah,50h            ; 'P'
  828.         je    loc_53            ; Jump if equal
  829.         and    al,0DFh
  830.         cmp    al,50h            ; 'P'
  831.         je    loc_43            ; Jump if equal
  832.         cmp    al,52h            ; 'R'
  833.         je    loc_47            ; Jump if equal
  834.         cmp    al,45h            ; 'E'
  835.         je    loc_48            ; Jump if equal
  836.         cmp    al,53h            ; 'S'
  837.         je    loc_44            ; Jump if equal
  838.         cmp    al,46h            ; 'F'
  839.         je    loc_45            ; Jump if equal
  840.         cmp    al,54h            ; 'T'
  841.         je    loc_46            ; Jump if equal
  842.         call    sub_11
  843.         jmp    short loc_42
  844. loc_43:
  845.         jmp    loc_137
  846. loc_44:
  847.         jmp    short loc_55
  848.         db    90h
  849. loc_45:
  850.         jmp    loc_145
  851. loc_46:
  852.         jmp    loc_149
  853. loc_47:
  854.         jmp    loc_151
  855. loc_48:
  856.         jmp    loc_154
  857. loc_49:
  858.         mov    al,3
  859.         mul    data_107        ; ax = data * al
  860.         add    ax,offset loc_43
  861.         jmp    ax            ;*Register jump
  862. loc_50:
  863.         mov    data_112,1Fh
  864.         call    sub_27
  865.         cmp    data_107,0
  866.         je    loc_52            ; Jump if equal
  867.         dec    data_107
  868.         sub    data_110,3
  869. loc_51:
  870.         mov    data_112,70h        ; 'p'
  871.         call    sub_27
  872.         jmp    short loc_42
  873. loc_52:
  874.         mov    data_107,5
  875.         mov    data_110,15h
  876.         jmp    short loc_51
  877. loc_53:
  878.         mov    data_112,1Fh
  879.         call    sub_27
  880.         cmp    data_107,5
  881.         je    loc_54            ; Jump if equal
  882.         inc    data_107
  883.         add    data_110,3
  884.         jmp    short loc_51
  885. loc_54:
  886.         mov    data_107,0
  887.         mov    data_110,6
  888.         jmp    short loc_51
  889. loc_55:
  890.         call    sub_19
  891.         mov    data_190,3120h
  892.         cmp    data_28,1
  893.         jne    loc_56            ; Jump if not equal
  894.         mov    data_29,0
  895.         jmp    short loc_60
  896.         db    90h
  897. loc_56:
  898.         mov    dh,0Dh
  899.         mov    dl,18h
  900.         mov    si,232h
  901.         call    sub_14
  902.         call    sub_13
  903.         mov    ah,0
  904.         int    16h            ; Keyboard i/o  ah=function 00h
  905.                         ;  get keybd char in al, ah=scan
  906.         cmp    al,1Bh
  907.         jne    loc_57            ; Jump if not equal
  908.         jmp    loc_41
  909. loc_57:
  910.         cmp    al,0Dh
  911.         je    loc_60            ; Jump if equal
  912.         and    al,0DFh
  913.         sub    al,41h            ; 'A'
  914.         jge    loc_59            ; Jump if > or =
  915. loc_58:
  916.         call    sub_11
  917.         jmp    short loc_55
  918. loc_59:
  919.         cmp    al,data_28
  920.         jge    loc_58            ; Jump if > or =
  921.         mov    data_29,al
  922.         add    al,41h            ; 'A'
  923.         mov    byte ptr ds:[24Eh],al    ; ('A')
  924.         mov    data_183,al
  925.         mov    data_188,al
  926. loc_60:
  927.         call    sub_19
  928.         call    sub_37
  929.         test    byte ptr [bx],1
  930.         jz    loc_63            ; Jump if zero
  931.         mov    dh,10h
  932.         mov    dl,14h
  933.         test    byte ptr [bx],2
  934.         jnz    loc_61            ; Jump if not zero
  935.         mov    si,251h
  936.         jmp    short loc_62
  937.         db    90h
  938. loc_61:
  939.         mov    si,27Eh
  940. loc_62:
  941.         call    sub_14
  942.         call    sub_13
  943.         mov    al,31h            ; '1'
  944.         mov    data_102,al
  945.         mov    al,[si-3]
  946.         mov    data_103,al
  947.         mov    data_89,1331h
  948.         call    sub_16
  949.         and    byte ptr [si-3],0FEh
  950.         or    [si-3],al
  951.         xor    al,1
  952.         xor    data_31,ax
  953. loc_63:
  954.         mov    ax,data_31
  955.         call    sub_39
  956. loc_64:
  957.         call    sub_20
  958.         mov    dh,0Bh
  959.         mov    dl,14h
  960.         mov    si,2ABh
  961.         call    sub_14
  962.         call    sub_38
  963.         cmp    data_101,0
  964.         je    loc_69            ; Jump if equal
  965.         mov    ax,word ptr ds:[137h]
  966.         mov    bx,ax
  967.         cmp    data_101,1
  968.         jne    loc_65            ; Jump if not equal
  969.         xchg    bh,bl
  970.         xor    bl,bl            ; Zero register
  971.         sub    al,30h            ; '0'
  972.         jmp    short loc_67
  973.         db    90h
  974. loc_65:
  975.         sub    al,27h            ; '''
  976.         cmp    al,0Ah
  977.         jg    loc_64            ; Jump if >
  978.         jz    loc_66            ; Jump if zero
  979.         xor    al,al            ; Zero register
  980. loc_66:
  981.         sub    ah,30h            ; '0'
  982.         add    al,ah
  983.         cmp    al,0Bh
  984.         jg    loc_64            ; Jump if >
  985. loc_67:
  986.         cmp    al,0
  987.         je    loc_64            ; Jump if equal
  988.         mov    data_96,al
  989.         or    bl,20h            ; ' '
  990.         cmp    bl,30h            ; '0'
  991.         jne    loc_68            ; Jump if not equal
  992.         mov    bl,20h            ; ' '
  993. loc_68:
  994.         mov    data_191,bx
  995.         mov    data_182,bx
  996. loc_69:
  997.         mov    data_100,0F5h
  998.         mov    data_95,0
  999.         mov    data_99,0
  1000.         call    sub_20
  1001.         mov    dh,0Ah
  1002.         mov    dl,18h
  1003.         mov    si,2DAh
  1004.         call    sub_14
  1005.         mov    dh,0Ch
  1006.         mov    dl,13h
  1007.         mov    si,2FBh
  1008.         call    sub_14
  1009.         call    sub_13
  1010. loc_70:
  1011.         mov    ah,0
  1012.         int    16h            ; Keyboard i/o  ah=function 00h
  1013.                         ;  get keybd char in al, ah=scan
  1014.         cmp    al,0Dh
  1015.         je    loc_72            ; Jump if equal
  1016.         cmp    al,1Bh
  1017.         jne    loc_71            ; Jump if not equal
  1018.         jmp    loc_41
  1019. loc_71:
  1020.         call    sub_11
  1021.         jmp    short loc_70
  1022. loc_72:
  1023.         mov    data_82,1525h
  1024.         cli                ; Disable interrupts
  1025.         pushf                ; Push flags
  1026.         push    cs
  1027.         mov    ax,201h
  1028.         mov    bx,28E9h
  1029.         mov    cx,1
  1030.         mov    dl,data_29
  1031.         xor    dh,dh            ; Zero register
  1032.         call    sub_6
  1033.         jnc    loc_78            ; Jump if carry=0
  1034.         clc                ; Clear carry flag
  1035.         test    ah,80h
  1036.         jz    loc_78            ; Jump if zero
  1037.         call    sub_11
  1038.         xor    cx,cx            ; Zero register
  1039.  
  1040. locloop_73:
  1041.         loop    locloop_73        ; Loop if cx > 0
  1042.  
  1043.         call    sub_11
  1044.         call    sub_56
  1045.         call    sub_20
  1046.         mov    dh,0Ah
  1047.         mov    dl,20h            ; ' '
  1048.         mov    si,3DAh
  1049.         call    sub_14
  1050. loc_74:
  1051.         mov    dh,0Eh
  1052.         mov    dl,20h            ; ' '
  1053.         mov    si,40Fh
  1054.         call    sub_14
  1055.         call    sub_13
  1056. loc_75:
  1057.         mov    ah,0
  1058.         int    16h            ; Keyboard i/o  ah=function 00h
  1059.                         ;  get keybd char in al, ah=scan
  1060.         cmp    al,1Bh
  1061.         je    loc_77            ; Jump if equal
  1062.         and    al,0DFh
  1063.         cmp    al,52h            ; 'R'
  1064.         jne    loc_76            ; Jump if not equal
  1065.         jmp    data_82
  1066. loc_76:
  1067.         cmp    al,41h            ; 'A'
  1068.         je    loc_77            ; Jump if equal
  1069.         call    sub_11
  1070.         jmp    short loc_75
  1071. loc_77:
  1072.         jmp    loc_135
  1073. loc_78:
  1074.         call    sub_24
  1075.         call    sub_61
  1076.         or    byte ptr ds:[22Eh],80h
  1077.         cli                ; Disable interrupts
  1078.         call    sub_7
  1079. loc_79:
  1080.         call    sub_52
  1081.         call    sub_60
  1082.         mov    data_82,1596h
  1083.         call    sub_64
  1084.         test    data_73,0C0h
  1085.         jz    loc_80            ; Jump if zero
  1086.         call    sub_64
  1087.         test    data_73,0C0h
  1088.         jz    loc_80            ; Jump if zero
  1089.         jmp    loc_123
  1090. loc_80:
  1091.         call    sub_74
  1092.         test    data_73,0C0h
  1093.         jz    loc_81            ; Jump if zero
  1094.         jmp    short loc_83
  1095.         db    90h
  1096. loc_81:
  1097.         cmp    byte ptr ds:[230h],0
  1098.         je    loc_82            ; Jump if equal
  1099.         mov    ax,word ptr ds:[243Dh]
  1100.         cmp    data_218,ax
  1101.         jne    loc_82            ; Jump if not equal
  1102.         mov    ax,word ptr ds:[243Fh]
  1103.         cmp    data_219,ax
  1104.         jne    loc_82            ; Jump if not equal
  1105.         jmp    loc_117
  1106. loc_82:
  1107.         cmp    byte ptr data_214,0EBh
  1108.         jne    loc_83            ; Jump if not equal
  1109.         cmp    data_217,200h
  1110.         jne    loc_83            ; Jump if not equal
  1111.         mov    data_84,1626h
  1112.         jmp    short loc_84
  1113.         db    90h
  1114. loc_83:
  1115.         mov    data_84,1623h
  1116. loc_84:
  1117.         call    sub_77
  1118.         jnc    loc_85            ; Jump if carry=0
  1119.         jmp    loc_123
  1120. loc_85:
  1121.         test    al,40h            ; '@'
  1122.         jz    loc_87            ; Jump if zero
  1123. loc_86:
  1124.         mov    data_62,3
  1125.         jmp    loc_125
  1126. loc_87:
  1127.         mov    byte ptr ds:[230h],0
  1128. loc_88:
  1129.         mov    data_82,161Fh
  1130. loc_89:
  1131.         jmp    data_84
  1132.         call    sub_78
  1133.         mov    data_68,28E9h
  1134.         mov    ax,word ptr data_60
  1135.         mov    data_67,ax
  1136.         mov    data_69,42h        ; 'B'
  1137.         mov    data_70,0E6h
  1138.         mov    data_85,27F1h
  1139.         call    sub_75
  1140.         test    data_73,0C0h
  1141.         jz    loc_95            ; Jump if zero
  1142.         test    data_74,20h        ; ' '
  1143.         jz    loc_90            ; Jump if zero
  1144.         cmp    data_94,2
  1145.         je    loc_93            ; Jump if equal
  1146.         inc    data_94
  1147.         jmp    short loc_91
  1148.         db    90h
  1149. loc_90:
  1150.         mov    data_94,0
  1151. loc_91:
  1152.         call    sub_65
  1153.         test    data_73,0C0h
  1154.         jz    loc_92            ; Jump if zero
  1155.         jmp    loc_123
  1156. loc_92:
  1157.         mov    data_84,1623h
  1158.         jmp    short loc_88
  1159. loc_93:
  1160.         mov    data_94,0
  1161.         cmp    data_65,0
  1162.         jne    loc_94            ; Jump if not equal
  1163.         jmp    loc_105
  1164. loc_94:
  1165.         call    sub_51
  1166. loc_95:
  1167.         cmp    data_64,0
  1168.         jne    loc_97            ; Jump if not equal
  1169.         mov    data_64,1
  1170. loc_96:
  1171.         jmp    short loc_89
  1172. loc_97:
  1173.         call    sub_9
  1174.         mov    data_82,161Fh
  1175.         mov    data_64,0
  1176.         inc    data_65
  1177.         inc    data_63
  1178.         cmp    data_31,0
  1179.         jne    loc_98            ; Jump if not equal
  1180.         inc    data_63
  1181. loc_98:
  1182.         call    sub_46
  1183.         cmp    data_63,50h        ; 'P'
  1184.         jge    loc_99            ; Jump if > or =
  1185.         call    sub_63
  1186.         test    data_73,0C0h
  1187.         jz    loc_96            ; Jump if zero
  1188.         call    sub_65
  1189.         test    data_73,0C0h
  1190.         jz    loc_96            ; Jump if zero
  1191.         jmp    short loc_100
  1192.         db    90h
  1193. loc_99:
  1194.         mov    data_65,0
  1195.         mov    data_63,0
  1196.         mov    data_66,1
  1197.         mov    data_64,0
  1198.         mov    data_59,0
  1199.         call    sub_63
  1200.         test    data_73,0C0h
  1201.         jz    loc_101            ; Jump if zero
  1202.         call    sub_65
  1203.         test    data_73,0C0h
  1204.         jz    loc_101            ; Jump if zero
  1205. loc_100:
  1206.         mov    data_62,40h        ; '@'
  1207.         jmp    loc_125
  1208. loc_101:
  1209.         mov    data_82,1712h
  1210.         call    sub_78
  1211.         cmp    data_64,1
  1212.         je    loc_102            ; Jump if equal
  1213.         mov    data_64,1
  1214.         jmp    short loc_101
  1215. loc_102:
  1216.         call    sub_52
  1217.         mov    ds,data_25
  1218.         mov    ax,word ptr ds:timer_low_+1
  1219.         push    cs
  1220.         pop    ds
  1221.         mov    word ptr ds:[243Dh],ax
  1222. loc_103:
  1223.         mov    data_82,1738h
  1224.         mov    data_64,0
  1225.         mov    data_68,2416h
  1226.         mov    data_67,1FFh
  1227.         mov    data_69,4Ah        ; 'J'
  1228.         mov    data_70,0C5h
  1229.         mov    data_85,27F1h
  1230.         call    sub_75
  1231.         test    data_73,0C0h
  1232.         jz    loc_106            ; Jump if zero
  1233.         test    data_74,2
  1234.         jz    loc_104            ; Jump if zero
  1235.         jmp    loc_86
  1236. loc_104:
  1237.         cmp    data_94,0
  1238.         jne    loc_105            ; Jump if not equal
  1239.         inc    data_94
  1240.         call    sub_65
  1241.         test    data_73,0C0h
  1242.         jz    loc_103            ; Jump if zero
  1243.         jmp    loc_123
  1244. loc_105:
  1245.         mov    data_62,20h        ; ' '
  1246.         jmp    loc_125
  1247. loc_106:
  1248.         call    sub_53
  1249.         mov    byte ptr ds:[21Ah],2
  1250.         mov    al,byte ptr ds:[242Bh]
  1251.         mov    data_214,al
  1252.         mov    data_215,0FFFFh
  1253.         mov    word ptr ds:[223h],0
  1254.         mov    word ptr ds:[21Fh],0
  1255.         mov    word ptr ds:[212h],139h
  1256. loc_107:
  1257.         mov    cx,80h
  1258.         mov    si,word ptr ds:[212h]
  1259. loc_108:
  1260.         mov    word ptr ds:[218h],cx
  1261.         mov    word ptr ds:[214h],si
  1262.         call    sub_55
  1263.         sub    ax,word ptr ds:[21Fh]
  1264.         test    cx,[si]
  1265.         jz    loc_113            ; Jump if zero
  1266.         cmp    ax,200h
  1267.         jl    loc_109            ; Jump if <
  1268.         mov    word ptr ds:[21Bh],ax
  1269.         call    sub_49
  1270.         call    sub_53
  1271.         call    sub_50
  1272.         mov    ax,word ptr ds:[21Bh]
  1273.         sub    ax,200h
  1274. loc_109:
  1275.         mov    di,offset data_214
  1276.         add    di,ax
  1277.         mov    al,data_56
  1278.         cbw                ; Convrt byte to word
  1279.         cmp    al,9
  1280.         jne    loc_110            ; Jump if not equal
  1281.         clc                ; Clear carry flag
  1282.         rcr    ax,1            ; Rotate thru carry
  1283.         adc    ax,0
  1284. loc_110:
  1285.         mov    cx,ax
  1286.         mov    si,word ptr ds:[229h]
  1287. loc_111:
  1288.         mov    bx,225h
  1289.         mov    ax,[bx+si]
  1290.         mov    bx,[di]
  1291.         or    ax,bx
  1292.         cld                ; Clear direction
  1293.         stosw                ; Store ax to es:[di]
  1294.         xor    si,2
  1295.         nop                ;*ASM fixup - sign extn byte
  1296.         jz    loc_112            ; Jump if zero
  1297.         dec    di
  1298. loc_112:
  1299.         dec    cx
  1300.         jnz    loc_111            ; Jump if not zero
  1301.         mov    word ptr ds:[21Dh],di
  1302.         jmp    short loc_114
  1303.         db    90h
  1304. loc_113:
  1305.         cmp    ax,200h
  1306.         jl    loc_114            ; Jump if <
  1307.         call    sub_49
  1308.         call    sub_53
  1309.         call    sub_50
  1310. loc_114:
  1311.         mov    word ptr ds:[21Bh],ax
  1312.         mov    al,data_56
  1313.         cbw                ; Convrt byte to word
  1314.         add    word ptr ds:[223h],ax
  1315.         mov    ax,word ptr ds:[21Bh]
  1316.         mov    cx,word ptr ds:[218h]
  1317.         mov    si,word ptr ds:[214h]
  1318.         shr    cx,1            ; Shift w/zeros fill
  1319.         jz    loc_115            ; Jump if zero
  1320.         jmp    loc_108
  1321. loc_115:
  1322.         inc    word ptr ds:[212h]
  1323.         mov    ax,word ptr ds:[212h]
  1324.         cmp    ax,word ptr ds:[216h]
  1325.         je    loc_116            ; Jump if equal
  1326.         jmp    loc_107
  1327. loc_116:
  1328.         call    sub_49
  1329.         call    sub_54
  1330.         mov    di,data_100
  1331.         mov    ax,word ptr ds:[243Fh]
  1332.         xchg    ah,al
  1333.         cld                ; Clear direction
  1334.         stosw                ; Store ax to es:[di]
  1335.         mov    ax,word ptr ds:[243Dh]
  1336.         xchg    ah,al
  1337.         stosw                ; Store ax to es:[di]
  1338.         mov    ax,word ptr data_98
  1339.         stosw                ; Store ax to es:[di]
  1340.         mov    data_100,di
  1341.         inc    data_95
  1342.         inc    data_99
  1343.         call    sub_12
  1344.         mov    al,data_96
  1345.         cmp    data_95,al
  1346.         je    loc_119            ; Jump if equal
  1347. loc_117:
  1348.         mov    byte ptr ds:[230h],1
  1349.         mov    ds,data_25
  1350.         mov    byte ptr ds:dsk_motor_tmr_,2
  1351.         push    cs
  1352.         pop    ds
  1353.         mov    data_92,3AAh
  1354.         call    sub_45
  1355.         mov    cx,88h
  1356.  
  1357. locloop_118:
  1358.         call    sub_7
  1359.         call    sub_9
  1360.         mov    cx,word ptr ds:[22Bh]
  1361.         mov    data_82,1596h
  1362.         loop    locloop_118        ; Loop if cx > 0
  1363.  
  1364.         jmp    loc_79
  1365. loc_119:
  1366.         mov    data_92,3C2h
  1367.         call    sub_45
  1368.         mov    data_107,2
  1369.         mov    data_110,0Ch
  1370. loc_120:
  1371.         mov    data_81,130Dh
  1372.         mov    byte ptr ds:[230h],0
  1373.         call    sub_8
  1374. loc_121:
  1375.         and    byte ptr ds:[22Eh],0
  1376.         mov    sp,2B84h
  1377.         mov    ax,202h
  1378.         push    ax
  1379.         push    cs
  1380.         mov    ax,data_81
  1381.         push    ax
  1382.         mov    word ptr cs:[1DCh],sp
  1383. loc_122:
  1384.         mov    ss,word ptr ds:[20Eh]
  1385.         mov    sp,word ptr ds:[208h]
  1386.         mov    es,word ptr ds:[210h]
  1387.         mov    bp,word ptr ds:[20Ah]
  1388.         mov    si,word ptr ds:[204h]
  1389.         mov    di,word ptr ds:[206h]
  1390.         mov    ax,word ptr ds:[1FCh]
  1391.         mov    bx,word ptr ds:[1FEh]
  1392.         mov    cx,word ptr ds:[200h]
  1393.         mov    dx,word ptr ds:[202h]
  1394.         mov    ds,word ptr ds:[20Ch]
  1395.         iret                ; Interrupt return
  1396. loc_123:
  1397.         mov    byte ptr ds:[22Fh],0
  1398.         mov    dx,3F2h
  1399.         mov    al,8
  1400.         out    dx,al            ; port 3F2h, dsk0 contrl output
  1401.         cmp    byte ptr ds:[230h],0
  1402.         je    loc_124            ; Jump if equal
  1403.         jmp    loc_117
  1404. loc_124:
  1405.         mov    data_62,80h
  1406. loc_125:
  1407.         mov    data_92,3B6h
  1408.         call    sub_45
  1409.         call    sub_12
  1410.         mov    byte ptr ds:[22Dh],6
  1411.         call    sub_7
  1412.         call    sub_12
  1413.         call    sub_8
  1414.         mov    data_81,195Dh
  1415.         jmp    short loc_121
  1416. sub_6        endp
  1417.  
  1418. loc_126:
  1419.         and    byte ptr cs:[22Eh],7Fh
  1420.         call    sub_28
  1421.         jnc    loc_128            ; Jump if carry=0
  1422.         clc                ; Clear carry flag
  1423.         call    sub_11
  1424.         test    byte ptr ds:[22Eh],20h    ; ' '
  1425.         jnz    loc_127            ; Jump if not zero
  1426.         jmp    loc_121
  1427. loc_127:
  1428.         jmp    loc_120
  1429. loc_128:
  1430.         call    sub_22
  1431.         call    sub_23
  1432.         call    sub_56
  1433.         call    sub_20
  1434.         cmp    data_62,80h
  1435.         je    loc_129            ; Jump if equal
  1436.         cmp    data_62,3
  1437.         je    loc_132            ; Jump if equal
  1438.         cmp    data_62,40h        ; '@'
  1439.         je    loc_131            ; Jump if equal
  1440.         cmp    data_62,20h        ; ' '
  1441.         je    loc_130            ; Jump if equal
  1442.         mov    dh,0Ah
  1443.         mov    dl,1Eh
  1444.         mov    si,441h
  1445.         call    sub_14
  1446.         jmp    short loc_133
  1447.         db    90h
  1448. loc_129:
  1449.         mov    dh,0Ah
  1450.         mov    dl,20h            ; ' '
  1451.         mov    si,3DAh
  1452.         call    sub_14
  1453.         jmp    short loc_133
  1454.         db    90h
  1455. loc_130:
  1456.         mov    dh,0Ah
  1457.         mov    dl,18h
  1458.         mov    si,420h
  1459.         call    sub_14
  1460.         jmp    short loc_133
  1461.         db    90h
  1462. loc_131:
  1463.         mov    dh,0Ah
  1464.         mov    dl,22h            ; '"'
  1465.         mov    si,402h
  1466.         call    sub_14
  1467.         jmp    short loc_133
  1468.         db    90h
  1469. loc_132:
  1470.         mov    dh,0Ah
  1471.         mov    dl,1Dh
  1472.         mov    si,3EBh
  1473.         call    sub_14
  1474. loc_133:
  1475.         mov    dh,0Eh
  1476.         mov    dl,20h            ; ' '
  1477.         mov    data_62,0
  1478.         mov    si,40Fh
  1479.         call    sub_14
  1480.         call    sub_13
  1481. loc_134:
  1482.         mov    ah,0
  1483.         int    16h            ; Keyboard i/o  ah=function 00h
  1484.                         ;  get keybd char in al, ah=scan
  1485.         cmp    al,1Bh
  1486.         je    loc_135            ; Jump if equal
  1487.         and    al,0DFh
  1488.         cmp    al,52h            ; 'R'
  1489.         je    loc_136            ; Jump if equal
  1490.         cmp    al,41h            ; 'A'
  1491.         je    loc_135            ; Jump if equal
  1492.         call    sub_11
  1493.         jmp    short loc_134
  1494. loc_135:
  1495.         call    sub_24
  1496.         mov    data_107,0
  1497.         mov    data_110,6
  1498.         jmp    loc_120
  1499. loc_136:
  1500.         call    sub_24
  1501.         cli                ; Disable interrupts
  1502.         mov    byte ptr ds:[22Eh],0C0h
  1503.         call    sub_7
  1504.         call    sub_65
  1505.         mov    cx,5
  1506.         jmp    data_82
  1507. loc_137:
  1508.         call    sub_19
  1509.         mov    dh,0Dh
  1510.         mov    dl,15h
  1511.         mov    si,457h
  1512.         call    sub_14
  1513.         call    sub_13
  1514. loc_138:
  1515.         mov    ah,0
  1516.         int    16h            ; Keyboard i/o  ah=function 00h
  1517.                         ;  get keybd char in al, ah=scan
  1518.         cmp    al,1Bh
  1519.         je    loc_144            ; Jump if equal
  1520.         cmp    al,0Dh
  1521.         je    loc_139            ; Jump if equal
  1522.         call    sub_11
  1523.         jmp    short loc_138
  1524. loc_139:
  1525.         call    sub_19
  1526.         mov    dh,0Dh
  1527.         mov    dl,21h            ; '!'
  1528.         mov    si,47Fh
  1529.         call    sub_14
  1530.         call    sub_13
  1531.         mov    bp,0A2Bh
  1532. loc_140:
  1533.         mov    ah,2
  1534.         xor    dx,dx            ; Zero register
  1535.         int    17h            ; Printer  dx=prn1, ah=func 02h
  1536.                         ;  read status, ah=return status
  1537.         test    ah,10h
  1538.         jz    loc_143            ; Jump if zero
  1539.         mov    al,[bp]
  1540.         cmp    al,0
  1541.         je    loc_144            ; Jump if equal
  1542.         xor    ah,ah            ; Zero register
  1543.         xor    dx,dx            ; Zero register
  1544.         int    17h            ; Printer  dx=prn1, ah=func 00h
  1545.                         ;  print char al, get status ah
  1546.         test    ah,29h            ; ')'
  1547.         jnz    loc_141            ; Jump if not zero
  1548.         inc    bp
  1549.         jmp    short loc_140
  1550. loc_141:
  1551.         call    sub_19
  1552.         mov    dh,0Ch
  1553.         mov    dl,23h            ; '#'
  1554.         mov    si,48Dh
  1555. loc_142:
  1556.         call    sub_14
  1557.         mov    data_82,1A2Eh
  1558.         jmp    loc_74
  1559. loc_143:
  1560.         call    sub_19
  1561.         mov    dh,0Ch
  1562.         mov    dl,1Eh
  1563.         mov    si,499h
  1564.         jmp    short loc_142
  1565. loc_144:
  1566.         jmp    loc_41
  1567. loc_145:
  1568.         cmp    data_95,0
  1569.         jne    loc_147            ; Jump if not equal
  1570.         call    sub_19
  1571.         mov    dh,0Dh
  1572.         mov    dl,20h            ; ' '
  1573.         mov    si,38Dh
  1574.         call    sub_14
  1575. loc_146:
  1576.         mov    dh,0Fh
  1577.         mov    dl,16h
  1578.         mov    si,368h
  1579.         call    sub_14
  1580.         call    sub_13
  1581.         jmp    short loc_148
  1582.         db    90h
  1583. loc_147:
  1584.         mov    ax,838h
  1585.         mov    cs:data_93,ax
  1586.         call    sub_21
  1587.         call    sub_31
  1588. loc_148:
  1589.         mov    ah,0
  1590.         int    16h            ; Keyboard i/o  ah=function 00h
  1591.                         ;  get keybd char in al, ah=scan
  1592.         mov    data_107,5
  1593.         mov    data_110,15h
  1594.         jmp    loc_41
  1595. loc_149:
  1596.         cmp    data_187,6666h
  1597.         je    loc_150            ; Jump if equal
  1598.         mov    data_187,6666h
  1599.         jmp    loc_41
  1600. loc_150:
  1601.         mov    data_187,206Eh
  1602.         jmp    loc_41
  1603. loc_151:
  1604.         mov    ax,11E0h
  1605.         mov    di,20h            ; (' ')
  1606.         call    sub_30
  1607.         jc    loc_152            ; Jump if carry Set
  1608.         mov    ax,12E6h
  1609.         mov    di,offset data_42
  1610.         call    sub_30
  1611.         jc    loc_152            ; Jump if carry Set
  1612.         mov    ax,12CCh
  1613.         mov    di,offset data_38
  1614.         call    sub_30
  1615.         jc    loc_152            ; Jump if carry Set
  1616.         mov    ax,127Ah
  1617.         mov    di,24h            ; (' ')
  1618.         call    sub_30
  1619.         jnc    loc_153            ; Jump if carry=0
  1620. loc_152:
  1621.         clc                ; Clear carry flag
  1622.         call    sub_19
  1623.         mov    dh,0Ch
  1624.         mov    dl,8
  1625.         mov    si,327h
  1626.         call    sub_14
  1627.         jmp    loc_146
  1628. loc_153:
  1629.         xor    ax,ax            ; Zero register
  1630.         mov    word ptr data_24,ax
  1631.         mov    si,offset 195h
  1632.         mov    di,20h            ; (' ')
  1633.         call    sub_29
  1634.         mov    si,offset 199h
  1635.         mov    di,24h            ; (' ')
  1636.         call    sub_29
  1637.         mov    si,offset 19Dh
  1638.         mov    di,offset data_38
  1639.         call    sub_29
  1640.         mov    si,offset 1A1h
  1641.         mov    di,offset data_42
  1642.         call    sub_29
  1643.         mov    es,data_26
  1644.         mov    di,data_2e
  1645.         xor    ax,ax            ; Zero register
  1646.         stosw                ; Store ax to es:[di]
  1647.         mov    es,data_27
  1648.         mov    di,data_2e
  1649.         xor    ax,ax            ; Zero register
  1650.         stosw                ; Store ax to es:[di]
  1651.         push    cs
  1652.         pop    es
  1653.         call    sub_24
  1654.         call    sub_7
  1655. loc_154:
  1656.         mov    data_107,0
  1657.         mov    data_110,6
  1658.         call    sub_24
  1659.         jmp    loc_121
  1660.  
  1661. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1662. ;                   SUBROUTINE
  1663. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1664.  
  1665. sub_7        proc    near
  1666.         add    byte ptr ds:[22Dh],1
  1667.         cli                ; Disable interrupts
  1668.         mov    word ptr ds:[1D0h],ax
  1669.         pop    ax
  1670.         pushf                ; Push flags
  1671.         push    cs
  1672.         push    ax
  1673.         mov    word ptr ds:[1DCh],sp
  1674.         mov    word ptr ds:[1D2h],bx
  1675.         mov    word ptr ds:[1DAh],ss
  1676.         mov    word ptr ds:[1E2h],ds
  1677.         mov    word ptr ds:[1E4h],es
  1678.         mov    word ptr ds:[1E0h],bp
  1679.         mov    word ptr ds:[1D8h],si
  1680.         mov    word ptr ds:[1DEh],di
  1681.         mov    word ptr ds:[1D4h],cx
  1682.         mov    word ptr ds:[1D6h],dx
  1683.         jmp    loc_122
  1684. sub_7        endp
  1685.  
  1686.  
  1687. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1688. ;                   SUBROUTINE
  1689. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1690.  
  1691. sub_8        proc    near
  1692.         mov    al,data_29
  1693.         cbw                ; Convrt byte to word
  1694.         mov    di,ax
  1695.         mov    ds,data_25
  1696.         and    byte ptr ds:hdsk0_media_st_[di],0EFh
  1697.         mov    byte ptr ds:dsk_motor_tmr_,2
  1698.         mov    byte ptr ds:dsk_recal_stat_,0
  1699.         push    cs
  1700.         pop    ds
  1701.         retn
  1702. sub_8        endp
  1703.  
  1704.  
  1705. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1706. ;                   SUBROUTINE
  1707. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1708.  
  1709. sub_9        proc    near
  1710.         mov    word ptr ds:[22Bh],cx
  1711.         test    byte ptr ds:[22Eh],20h    ; ' '
  1712.         jz    loc_ret_155        ; Jump if zero
  1713.         pop    ax
  1714.         mov    data_82,ax
  1715.         jmp    loc_126
  1716.  
  1717. loc_ret_155:
  1718.         retn
  1719. sub_9        endp
  1720.  
  1721.  
  1722. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1723. ;                   SUBROUTINE
  1724. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1725.  
  1726. sub_10        proc    near
  1727.         mov    ah,0Eh
  1728.         mov    bh,0
  1729.         int    10h            ; Video display   ah=functn 0Eh
  1730.                         ;  write char al, teletype mode
  1731.         retn
  1732. sub_10        endp
  1733.  
  1734.  
  1735. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1736. ;                   SUBROUTINE
  1737. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1738.  
  1739. sub_11        proc    near
  1740.         push    ax
  1741.         push    bx
  1742.         mov    al,7
  1743.         call    sub_10
  1744.         pop    bx
  1745.         pop    ax
  1746.         retn
  1747. sub_11        endp
  1748.  
  1749.  
  1750. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1751. ;                   SUBROUTINE
  1752. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1753.  
  1754. sub_12        proc    near
  1755.         call    sub_7
  1756.         mov    al,0B6h
  1757.         out    43h,al            ; port 43h, 8253 wrt timr mode
  1758.         mov    ax,180h
  1759.         out    42h,al            ; port 42h, 8253 timer 2 spkr
  1760.         mov    al,ah
  1761.         out    42h,al            ; port 42h, 8253 timer 2 spkr
  1762.         in    al,61h            ; port 61h, 8255 port B, read
  1763.         or    al,3
  1764.         out    61h,al            ; port 61h, 8255 B - spkr, etc
  1765.         call    sub_7
  1766.         in    al,61h            ; port 61h, 8255 port B, read
  1767.         and    al,0FCh
  1768.         out    61h,al            ; port 61h, 8255 B - spkr, etc
  1769.                         ;  al = 0, disable parity
  1770.         retn
  1771. sub_12        endp
  1772.  
  1773.  
  1774. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1775. ;                   SUBROUTINE
  1776. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1777.  
  1778. sub_13        proc    near
  1779.         mov    ah,2
  1780.         mov    dx,2000h
  1781.         mov    bh,data_104
  1782.         int    10h            ; Video display   ah=functn 02h
  1783.                         ;  set cursor location in dx
  1784.         retn
  1785. sub_13        endp
  1786.  
  1787.  
  1788. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1789. ;                   SUBROUTINE
  1790. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1791.  
  1792. sub_14        proc    near
  1793.         mov    ah,2
  1794.         mov    bh,0
  1795.         int    10h            ; Video display   ah=functn 02h
  1796.                         ;  set cursor location in dx
  1797.         call    sub_15
  1798.         retn
  1799. sub_14        endp
  1800.  
  1801.  
  1802. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1803. ;                   SUBROUTINE
  1804. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1805.  
  1806. sub_15        proc    near
  1807. loc_156:
  1808.         cld                ; Clear direction
  1809.         lodsb                ; String [si] to al
  1810.         cmp    al,0
  1811.         je    loc_ret_157        ; Jump if equal
  1812.         mov    ah,0Eh
  1813.         mov    bh,0
  1814.         int    10h            ; Video display   ah=functn 0Eh
  1815.                         ;  write char al, teletype mode
  1816.         jmp    short loc_156
  1817.  
  1818. loc_ret_157:
  1819.         retn
  1820. sub_15        endp
  1821.  
  1822.  
  1823. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1824. ;                   SUBROUTINE
  1825. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1826.  
  1827. sub_16        proc    near
  1828. loc_158:
  1829.         mov    ah,0
  1830.         int    16h            ; Keyboard i/o  ah=function 00h
  1831.                         ;  get keybd char in al, ah=scan
  1832.         cmp    al,1Bh
  1833.         jne    loc_159            ; Jump if not equal
  1834.         pop    ax
  1835.         jmp    data_89
  1836. loc_159:
  1837.         cmp    al,0Dh
  1838.         jne    loc_160            ; Jump if not equal
  1839.         mov    al,data_103
  1840.         jmp    short loc_161
  1841.         db    90h
  1842. loc_160:
  1843.         cmp    al,30h            ; '0'
  1844.         jl    loc_162            ; Jump if <
  1845.         cmp    al,data_102
  1846.         jg    loc_162            ; Jump if >
  1847. loc_161:
  1848.         and    ax,7
  1849.         retn
  1850. loc_162:
  1851.         call    sub_11
  1852.         jmp    short loc_158
  1853. sub_16        endp
  1854.  
  1855.  
  1856. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1857. ;                   SUBROUTINE
  1858. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1859.  
  1860. sub_17        proc    near
  1861.         mov    cx,0FA0h
  1862.         shr    cx,1            ; Shift w/zeros fill
  1863.         cld                ; Clear direction
  1864.         lodsb                ; String [si] to al
  1865.         inc    si
  1866.         xchg    ah,al
  1867. loc_163:
  1868.         lodsb                ; String [si] to al
  1869.         dec    cx
  1870.         jz    loc_165            ; Jump if zero
  1871.         inc    si
  1872.         cmp    ah,al
  1873.         jne    loc_164            ; Jump if not equal
  1874.         inc    bx
  1875.         jmp    short loc_163
  1876. loc_164:
  1877.         call    sub_26
  1878.         jmp    short loc_163
  1879. loc_165:
  1880.         call    sub_26
  1881.         retn
  1882. sub_17        endp
  1883.  
  1884.  
  1885. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1886. ;                   SUBROUTINE
  1887. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1888.  
  1889. sub_18        proc    near
  1890.         push    ds
  1891.         push    es
  1892.         mov    si,data_1e
  1893.         mov    di,data_16e
  1894.         mov    bx,0
  1895.         mov    ds,cs:data_91
  1896.         mov    es,cs:data_91
  1897.         call    sub_17
  1898.         mov    si,data_2e
  1899.         mov    bx,0
  1900.         call    sub_17
  1901.         pop    es
  1902.         pop    ds
  1903.         retn
  1904. sub_18        endp
  1905.  
  1906.  
  1907. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1908. ;                   SUBROUTINE
  1909. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1910.  
  1911. sub_19        proc    near
  1912.         mov    ax,4ADh
  1913.         mov    data_93,ax
  1914.         call    sub_21
  1915.         retn
  1916. sub_19        endp
  1917.  
  1918.  
  1919. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1920. ;                   SUBROUTINE
  1921. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1922.  
  1923. sub_20        proc    near
  1924.         mov    ax,6F7h
  1925.         mov    data_93,ax
  1926.         call    sub_21
  1927.         retn
  1928. sub_20        endp
  1929.  
  1930.  
  1931. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1932. ;                   SUBROUTINE
  1933. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1934.  
  1935. sub_21        proc    near
  1936.         push    cx
  1937.         push    dx
  1938.         push    si
  1939.         push    di
  1940.         push    ax
  1941.         xor    di,di            ; Zero register
  1942.         mov    si,cs:data_93
  1943. loc_166:
  1944.         lodsb                ; String [si] to al
  1945.         cmp    al,1
  1946.         jne    loc_169            ; Jump if not equal
  1947.         lodsw                ; String [si] to ax
  1948.         mov    cx,ax
  1949.         test    cl,80h
  1950.         jz    loc_167            ; Jump if zero
  1951.         xchg    ch,cl
  1952.         and    cx,7FFFh
  1953.         lodsb                ; String [si] to al
  1954.         jmp    short locloop_168
  1955.         db    90h
  1956. loc_167:
  1957.         xchg    al,ah
  1958.         and    cx,7Fh
  1959.  
  1960. locloop_168:
  1961.         call    sub_25
  1962.         loop    locloop_168        ; Loop if cx > 0
  1963.  
  1964.         jmp    short loc_170
  1965.         db    90h
  1966. loc_169:
  1967.         call    sub_25
  1968. loc_170:
  1969.         cmp    di,0FA0h
  1970.         jl    loc_166            ; Jump if <
  1971.         jnz    loc_171            ; Jump if not zero
  1972.         mov    di,1
  1973.         jmp    short loc_166
  1974. loc_171:
  1975.         pop    ax
  1976.         pop    di
  1977.         pop    si
  1978.         pop    dx
  1979.         pop    cx
  1980.         retn
  1981. sub_21        endp
  1982.  
  1983.  
  1984. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1985. ;                   SUBROUTINE
  1986. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1987.  
  1988. sub_22        proc    near
  1989.         push    ds
  1990.         mov    ds,data_91
  1991.         mov    si,data_4e
  1992.         mov    di,offset data_115
  1993.         mov    cx,7
  1994.         cld                ; Clear direction
  1995.         repe    cmpsw            ; Rep zf=1+cx >0 Cmp [si] to es:[di]
  1996.         pop    ds
  1997.         cmp    cx,0
  1998.         jne    loc_ret_172        ; Jump if not equal
  1999.         mov    data_92,0D5h
  2000.         call    sub_44
  2001.  
  2002. loc_ret_172:
  2003.         retn
  2004. sub_22        endp
  2005.  
  2006.  
  2007. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2008. ;                   SUBROUTINE
  2009. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2010.  
  2011. sub_23        proc    near
  2012.         mov    ah,0Fh
  2013.         int    10h            ; Video display   ah=functn 0Fh
  2014.                         ;  get state, al=mode, bh=page
  2015.                         ;   ah=columns on screen
  2016.         mov    ah,3
  2017.         int    10h            ; Video display   ah=functn 03h
  2018.                         ;  get cursor loc in dx, mode cx
  2019.         mov    data_104,bh
  2020.         mov    data_105,cx
  2021.         mov    data_106,dx
  2022.         call    sub_18
  2023.         retn
  2024. sub_23        endp
  2025.  
  2026.  
  2027. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2028. ;                   SUBROUTINE
  2029. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2030.  
  2031. sub_24        proc    near
  2032.         mov    data_93,1000h
  2033.         mov    ax,data_91
  2034.         push    ds
  2035.         mov    ds,ax
  2036.         call    sub_21
  2037.         pop    ds
  2038.         mov    bh,data_104
  2039.         mov    dx,data_106
  2040.         mov    ah,2
  2041.         int    10h            ; Video display   ah=functn 02h
  2042.                         ;  set cursor location in dx
  2043.         mov    ah,1
  2044.         mov    cx,data_105
  2045.         int    10h            ; Video display   ah=functn 01h
  2046.                         ;  set cursor mode in cx
  2047.         retn
  2048. sub_24        endp
  2049.  
  2050.  
  2051. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2052. ;                   SUBROUTINE
  2053. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2054.  
  2055. sub_25        proc    near
  2056.         push    es
  2057.         mov    es,cs:data_91
  2058.         mov    dx,cs:data_90
  2059.         cli                ; Disable interrupts
  2060.         push    ax
  2061. loc_173:
  2062.         in    al,dx            ; port 0, DMA-1 bas&add ch 0
  2063.         test    al,1
  2064.         jnz    loc_173            ; Jump if not zero
  2065. loc_174:
  2066.         in    al,dx            ; port 0, DMA-1 bas&add ch 0
  2067.         test    al,1
  2068.         jz    loc_174            ; Jump if zero
  2069.         pop    ax
  2070.         mov    es:[di],al
  2071.         sti                ; Enable interrupts
  2072.         inc    di
  2073.         inc    di
  2074.         pop    es
  2075.         retn
  2076. sub_25        endp
  2077.  
  2078.  
  2079. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2080. ;                   SUBROUTINE
  2081. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2082.  
  2083. sub_26        proc    near
  2084.         cmp    ah,1
  2085.         je    loc_175            ; Jump if equal
  2086.         cmp    bx,0
  2087.         je    loc_178            ; Jump if equal
  2088.         cmp    bx,1
  2089.         jne    loc_175            ; Jump if not equal
  2090.         xor    bx,bx            ; Zero register
  2091.         xchg    ah,al
  2092.         stosb                ; Store al to es:[di]
  2093.         jmp    short loc_179
  2094.         db    90h
  2095. loc_175:
  2096.         push    ax
  2097.         inc    bx
  2098.         mov    al,1
  2099.         stosb                ; Store al to es:[di]
  2100.         mov    ax,bx
  2101.         and    bx,0FF80h
  2102.         nop                ;*ASM fixup - sign extn byte
  2103.         jz    loc_176            ; Jump if zero
  2104.         or    ax,8000h
  2105.         xchg    ah,al
  2106.         stosw                ; Store ax to es:[di]
  2107.         jmp    short loc_177
  2108.         db    90h
  2109. loc_176:
  2110.         stosb                ; Store al to es:[di]
  2111. loc_177:
  2112.         xor    bx,bx            ; Zero register
  2113.         pop    ax
  2114. loc_178:
  2115.         xchg    ah,al
  2116. loc_179:
  2117.         stosb                ; Store al to es:[di]
  2118.         retn
  2119. sub_26        endp
  2120.  
  2121.  
  2122. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2123. ;                   SUBROUTINE
  2124. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2125.  
  2126. sub_27        proc    near
  2127.         mov    al,data_110
  2128.         mul    data_111        ; ax = data * al
  2129.         add    ax,3Dh
  2130.         mov    di,ax
  2131.         mov    al,data_112
  2132.         mov    cl,15h
  2133. loc_180:
  2134.         call    sub_25
  2135.         dec    cl
  2136.         cmp    cl,0
  2137.         jne    loc_180            ; Jump if not equal
  2138.         retn
  2139. sub_27        endp
  2140.  
  2141.  
  2142. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2143. ;                   SUBROUTINE
  2144. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2145.  
  2146. sub_28        proc    near
  2147.         mov    ds,data_25
  2148.         cmp    byte ptr ds:video_mode_,7
  2149.         je    loc_183            ; Jump if equal
  2150.         cmp    byte ptr ds:video_mode_,2
  2151.         je    loc_182            ; Jump if equal
  2152.         cmp    byte ptr ds:video_mode_,3
  2153.         je    loc_182            ; Jump if equal
  2154. loc_181:
  2155.         push    cs
  2156.         pop    ds
  2157.         stc                ; Set carry flag
  2158.         retn
  2159. loc_182:
  2160.         push    cs
  2161.         pop    ds
  2162.         clc                ; Clear carry flag
  2163.         retn
  2164. loc_183:
  2165.         mov    ds,cs:data_91
  2166.         xor    si,si            ; Zero register
  2167.         mov    cx,50h
  2168.         xor    bx,bx            ; Zero register
  2169.         cld                ; Clear direction
  2170.  
  2171. locloop_184:
  2172.         lodsw                ; String [si] to ax
  2173.         cmp    ah,al
  2174.         jne    loc_185            ; Jump if not equal
  2175.         inc    bx
  2176. loc_185:
  2177.         loop    locloop_184        ; Loop if cx > 0
  2178.  
  2179.         cmp    bx,0Ah
  2180.         jg    loc_181            ; Jump if >
  2181.         jmp    short loc_182
  2182. sub_28        endp
  2183.  
  2184.  
  2185. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2186. ;                   SUBROUTINE
  2187. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2188.  
  2189. sub_29        proc    near
  2190.         mov    cx,2
  2191.         mov    es,data_25
  2192.         cld                ; Clear direction
  2193.         cli                ; Disable interrupts
  2194.         rep    movsw            ; Rep when cx >0 Mov [si] to es:[di]
  2195.         sti                ; Enable interrupts
  2196.         retn
  2197. sub_29        endp
  2198.  
  2199.  
  2200. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2201. ;                   SUBROUTINE
  2202. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2203.  
  2204. sub_30        proc    near
  2205.         clc                ; Clear carry flag
  2206.         mov    word ptr ds:[1F0h],es
  2207.         mov    es,data_25
  2208.         cmp    ax,es:[di]
  2209.         jne    loc_186            ; Jump if not equal
  2210.         push    cs
  2211.         pop    ax
  2212.         cmp    ax,es:[di+2]
  2213.         je    loc_187            ; Jump if equal
  2214. loc_186:
  2215.         stc                ; Set carry flag
  2216. loc_187:
  2217.         mov    es,word ptr ds:[1F0h]
  2218.         retn
  2219. sub_30        endp
  2220.  
  2221.  
  2222. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2223. ;                   SUBROUTINE
  2224. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2225.  
  2226. sub_31        proc    near
  2227.         mov    data_100,0F5h
  2228.         mov    data_97,9
  2229.         mov    data_95,1
  2230. loc_188:
  2231.         mov    al,data_95
  2232.         cbw                ; Convrt byte to word
  2233.         mov    word ptr ds:[1A9h],0
  2234.         mov    word ptr ds:[1ABh],ax
  2235.         call    sub_32
  2236.         mov    dh,byte ptr ds:[1AFh]
  2237.         mov    dl,7
  2238.         sub    dl,dh
  2239.         mov    dh,data_97
  2240.         mov    si,0EDh
  2241.         call    sub_14
  2242.         mov    si,data_100
  2243.         mov    di,3A0h
  2244.         cld                ; Clear direction
  2245.         call    sub_35
  2246.         inc    di
  2247.         call    sub_35
  2248.         mov    data_100,si
  2249.         mov    dh,data_97
  2250.         mov    dl,14h
  2251.         mov    si,3A0h
  2252.         call    sub_14
  2253.         mov    si,data_100
  2254.         lodsw                ; String [si] to ax
  2255.         mov    word ptr data_98,ax
  2256.         mov    data_100,si
  2257.         mov    word ptr ds:[1A9h],0
  2258.         mov    word ptr ds:[1ABh],ax
  2259.         call    sub_32
  2260.         mov    dh,byte ptr ds:[1AFh]
  2261.         mov    dl,2Dh            ; '-'
  2262.         sub    dl,dh
  2263.         mov    dh,data_97
  2264.         mov    si,0EDh
  2265.         call    sub_14
  2266.         mov    bl,50h            ; 'P'
  2267.         xor    bh,bh            ; Zero register
  2268.         cmp    data_31,0
  2269.         jne    loc_189            ; Jump if not equal
  2270.         shr    bx,1            ; Shift w/zeros fill
  2271. loc_189:
  2272.         dec    bx
  2273.         mov    ax,2
  2274.         mul    bx            ; dx:ax = reg * ax
  2275.         mov    bl,data_56
  2276.         xor    bh,bh            ; Zero register
  2277.         mul    bx            ; dx:ax = reg * ax
  2278.         mov    bl,data_53
  2279.         add    ax,bx
  2280.         mov    bx,word ptr data_98
  2281.         cmp    byte ptr ds:[2423h],1
  2282.         je    loc_190            ; Jump if equal
  2283.         shl    bx,1            ; Shift w/zeros fill
  2284. loc_190:
  2285.         sub    ax,bx
  2286.         mov    bx,200h
  2287.         mul    bx            ; dx:ax = reg * ax
  2288.         mov    word ptr ds:[1A9h],dx
  2289.         mov    word ptr ds:[1ABh],ax
  2290.         call    sub_32
  2291.         mov    dh,byte ptr ds:[1AFh]
  2292.         mov    dl,44h            ; 'D'
  2293.         sub    dl,dh
  2294.         mov    dh,data_97
  2295.         mov    si,0EDh
  2296.         call    sub_14
  2297.         mov    al,data_99
  2298.         cmp    data_95,al
  2299.         jne    loc_191            ; Jump if not equal
  2300.         call    sub_13
  2301.         retn
  2302. loc_191:
  2303.         inc    data_95
  2304.         inc    data_97
  2305.         jmp    loc_188
  2306. sub_31        endp
  2307.  
  2308.  
  2309. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2310. ;                   SUBROUTINE
  2311. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2312.  
  2313. sub_32        proc    near
  2314.         mov    di,0EDh
  2315.         call    sub_33
  2316.         mov    word ptr ds:[1ADh],bx
  2317.         mov    byte ptr ds:[1AFh],bl
  2318.         jz    loc_195            ; Jump if zero
  2319. loc_192:
  2320.         cld                ; Clear direction
  2321.         or    al,30h            ; '0'
  2322.         stosb                ; Store al to es:[di]
  2323.         mov    word ptr ds:[1A5h],0
  2324.         mov    word ptr ds:[1A7h],0
  2325.         push    di
  2326.         mov    di,word ptr ds:[1B0h]
  2327.         add    di,word ptr ds:[1B2h]
  2328.         call    sub_34
  2329.         pop    di
  2330.         mov    ax,word ptr ds:[1A7h]
  2331.         sub    word ptr ds:[1ABh],ax
  2332.         jnc    loc_193            ; Jump if carry=0
  2333.         dec    word ptr ds:[1A9h]
  2334. loc_193:
  2335.         mov    ax,word ptr ds:[1A5h]
  2336.         sub    word ptr ds:[1A9h],ax
  2337.         dec    word ptr ds:[1ADh]
  2338.         cmp    word ptr ds:[1ADh],0
  2339.         je    loc_195            ; Jump if equal
  2340.         call    sub_33
  2341. loc_194:
  2342.         cmp    bx,word ptr ds:[1ADh]
  2343.         je    loc_192            ; Jump if equal
  2344.         push    ax
  2345.         mov    al,30h            ; '0'
  2346.         stosb                ; Store al to es:[di]
  2347.         pop    ax
  2348.         dec    word ptr ds:[1ADh]
  2349.         cmp    word ptr ds:[1ADh],0
  2350.         jne    loc_194            ; Jump if not equal
  2351. loc_195:
  2352.         mov    ax,word ptr ds:[1ABh]
  2353.         or    al,30h            ; '0'
  2354.         cld                ; Clear direction
  2355.         stosb                ; Store al to es:[di]
  2356.         mov    al,0
  2357.         stosb                ; Store al to es:[di]
  2358.         retn
  2359. sub_32        endp
  2360.  
  2361.  
  2362. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2363. ;                   SUBROUTINE
  2364. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2365.  
  2366. sub_33        proc    near
  2367.         mov    dx,word ptr ds:[1A9h]
  2368.         mov    ax,word ptr ds:[1ABh]
  2369.         mov    word ptr ds:[1B0h],0
  2370.         mov    word ptr ds:[1B2h],0
  2371.         cmp    dx,0
  2372.         jne    loc_196            ; Jump if not equal
  2373.         cmp    ax,2710h
  2374.         jb    loc_197            ; Jump if below
  2375. loc_196:
  2376.         mov    bx,2710h
  2377.         mov    word ptr ds:[1B0h],8
  2378.         div    bx            ; ax,dx rem=dx:ax/reg
  2379. loc_197:
  2380.         cmp    ax,0Ah
  2381.         jb    loc_200            ; Jump if below
  2382.         mov    word ptr ds:[1B2h],6
  2383.         xor    dx,dx            ; Zero register
  2384.         mov    bx,offset 1C8h
  2385. loc_198:
  2386.         cmp    ax,[bx]
  2387.         jge    loc_199            ; Jump if > or =
  2388.         sub    word ptr ds:[1B2h],2
  2389.         sub    bx,2
  2390.         jmp    short loc_198
  2391. loc_199:
  2392.         mov    bx,[bx]
  2393.         div    bx            ; ax,dx rem=dx:ax/reg
  2394. loc_200:
  2395.         mov    bx,word ptr ds:[1B0h]
  2396.         add    bx,word ptr ds:[1B2h]
  2397.         shr    bx,1            ; Shift w/zeros fill
  2398.         retn
  2399. sub_33        endp
  2400.  
  2401.  
  2402. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2403. ;                   SUBROUTINE
  2404. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2405.  
  2406. sub_34        proc    near
  2407.         and    al,0Fh
  2408.         cbw                ; Convrt byte to word
  2409.         push    ax
  2410.         mov    bx,offset 1C2h
  2411.         mov    bx,[bx+di]
  2412.         mul    bx            ; dx:ax = reg * ax
  2413.         add    word ptr ds:[1A7h],ax
  2414.         jnc    loc_201            ; Jump if carry=0
  2415.         inc    dx
  2416. loc_201:
  2417.         add    word ptr ds:[1A5h],dx
  2418.         mov    bx,offset 1B4h
  2419.         pop    ax
  2420.         mov    bx,[bx+di]
  2421.         mul    bx            ; dx:ax = reg * ax
  2422.         add    word ptr ds:[1A5h],ax
  2423.         retn
  2424. sub_34        endp
  2425.  
  2426.  
  2427. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2428. ;                   SUBROUTINE
  2429. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2430.  
  2431. sub_35        proc    near
  2432.         lodsb                ; String [si] to al
  2433.         call    sub_36
  2434.         stosw                ; Store ax to es:[di]
  2435.         lodsb                ; String [si] to al
  2436.         call    sub_36
  2437.         stosw                ; Store ax to es:[di]
  2438.         retn
  2439. sub_35        endp
  2440.  
  2441.  
  2442. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2443. ;                   SUBROUTINE
  2444. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2445.  
  2446. sub_36        proc    near
  2447.         mov    ah,al
  2448.         and    ah,0Fh
  2449.         mov    cl,4
  2450.         shr    al,cl            ; Shift w/zeros fill
  2451.         and    al,0Fh
  2452.         cmp    al,0Ah
  2453.         jge    loc_202            ; Jump if > or =
  2454.         add    al,30h            ; '0'
  2455.         jmp    short loc_203
  2456.         db    90h
  2457. loc_202:
  2458.         add    al,37h            ; '7'
  2459. loc_203:
  2460.         cmp    ah,0Ah
  2461.         jge    loc_204            ; Jump if > or =
  2462.         add    ah,30h            ; '0'
  2463.         jmp    short loc_ret_205
  2464.         db    90h
  2465. loc_204:
  2466.         add    ah,37h            ; '7'
  2467.  
  2468. loc_ret_205:
  2469.         retn
  2470. sub_36        endp
  2471.  
  2472.  
  2473. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2474. ;                   SUBROUTINE
  2475. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2476.  
  2477. sub_37        proc    near
  2478.         mov    al,data_29
  2479.         mov    bx,offset data_30
  2480.         cbw                ; Convrt byte to word
  2481.         add    bx,ax
  2482.         mov    al,[bx]
  2483.         mov    data_31,ax
  2484.         retn
  2485. sub_37        endp
  2486.  
  2487.  
  2488. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2489. ;                   SUBROUTINE
  2490. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2491.  
  2492. sub_38        proc    near
  2493.         mov    ah,1
  2494.         mov    cx,7
  2495.         int    10h            ; Video display   ah=functn 01h
  2496.                         ;  set cursor mode in cx
  2497.         mov    ah,3
  2498.         mov    bh,data_104
  2499.         int    10h            ; Video display   ah=functn 03h
  2500.                         ;  get cursor loc in dx, mode cx
  2501.         mov    data_108,dh
  2502.         mov    data_109,dl
  2503.         mov    di,137h
  2504.         mov    data_101,0
  2505. loc_206:
  2506.         mov    ah,0
  2507.         int    16h            ; Keyboard i/o  ah=function 00h
  2508.                         ;  get keybd char in al, ah=scan
  2509.         cmp    al,0Dh
  2510.         jne    loc_207            ; Jump if not equal
  2511.         retn
  2512. loc_207:
  2513.         cmp    al,1Bh
  2514.         jne    loc_208            ; Jump if not equal
  2515.         pop    ax
  2516.         jmp    loc_41
  2517. loc_208:
  2518.         cmp    al,10h
  2519.         je    loc_209            ; Jump if equal
  2520.         cmp    ax,5300h
  2521.         jne    loc_210            ; Jump if not equal
  2522. loc_209:
  2523.         call    sub_41
  2524.         call    sub_41
  2525.         jmp    short loc_206
  2526. loc_210:
  2527.         cmp    ax,4B00h
  2528.         je    loc_211            ; Jump if equal
  2529.         cmp    al,8
  2530.         jne    loc_212            ; Jump if not equal
  2531. loc_211:
  2532.         call    sub_41
  2533.         jmp    short loc_206
  2534. loc_212:
  2535.         cmp    al,30h            ; '0'
  2536.         jb    loc_213            ; Jump if below
  2537.         cmp    al,39h            ; '9'
  2538.         jg    loc_213            ; Jump if >
  2539.         cmp    data_101,2
  2540.         je    loc_213            ; Jump if equal
  2541.         cld                ; Clear direction
  2542.         stosb                ; Store al to es:[di]
  2543.         inc    data_101
  2544.         inc    data_109
  2545.         call    sub_10
  2546.         jmp    short loc_206
  2547. loc_213:
  2548.         call    sub_11
  2549.         jmp    short loc_206
  2550. sub_38        endp
  2551.  
  2552.  
  2553. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2554. ;                   SUBROUTINE
  2555. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2556.  
  2557. sub_39        proc    near
  2558.         mov    si,offset data_33+6    ; (' ')
  2559. loc_214:
  2560.         cmp    al,0
  2561.         je    loc_215            ; Jump if equal
  2562.         add    si,7
  2563.         dec    al
  2564.         jmp    short loc_214
  2565. loc_215:
  2566.         mov    di,offset data_189
  2567. loc_216:
  2568.         lodsb                ; String [si] to al
  2569.         cmp    al,0
  2570.         jne    loc_217            ; Jump if not equal
  2571.         retn
  2572. loc_217:
  2573.         stosb                ; Store al to es:[di]
  2574. sub_39        endp
  2575.  
  2576.  
  2577. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2578. ;                   SUBROUTINE
  2579. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2580.  
  2581. sub_40        proc    near
  2582.         jmp    short loc_216
  2583. sub_40        endp
  2584.  
  2585.  
  2586. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2587. ;                   SUBROUTINE
  2588. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2589.  
  2590. sub_41        proc    near
  2591.         cmp    data_101,0
  2592.         je    loc_ret_218        ; Jump if equal
  2593.         dec    di
  2594.         dec    data_101
  2595.         dec    data_109
  2596.         call    sub_42
  2597.         mov    al,20h            ; ' '
  2598.         call    sub_10
  2599.         call    sub_42
  2600.  
  2601. loc_ret_218:
  2602.         retn
  2603. sub_41        endp
  2604.  
  2605.  
  2606. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2607. ;                   SUBROUTINE
  2608. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2609.  
  2610. sub_42        proc    near
  2611.         mov    ah,2
  2612.         mov    bh,data_104
  2613.         mov    dh,data_108
  2614.         mov    dl,data_109
  2615.         int    10h            ; Video display   ah=functn 02h
  2616.                         ;  set cursor location in dx
  2617.         retn
  2618. sub_42        endp
  2619.  
  2620.  
  2621. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2622. ;                   SUBROUTINE
  2623. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2624.  
  2625. sub_43        proc    near
  2626.         push    ds
  2627.         mov    ds,data_91
  2628.         mov    si,data_4e
  2629.         mov    di,offset data_115
  2630.         mov    cx,7
  2631.         cld                ; Clear direction
  2632.         repe    cmpsw            ; Rep zf=1+cx >0 Cmp [si] to es:[di]
  2633.         cmp    cx,0
  2634.         je    loc_219            ; Jump if equal
  2635.         mov    di,offset data_113
  2636.         mov    si,data_4e
  2637.         mov    cx,6
  2638.         rep    movsw            ; Rep when cx >0 Mov [si] to es:[di]
  2639. loc_219:
  2640.         pop    ds
  2641.         call    sub_44
  2642.         mov    di,offset data_115
  2643.         mov    si,data_92
  2644.         mov    cx,6
  2645.         rep    movsw            ; Rep when cx >0 Mov [si] to es:[di]
  2646.         retn
  2647. sub_43        endp
  2648.  
  2649.  
  2650. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2651. ;                   SUBROUTINE
  2652. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2653.  
  2654. sub_44        proc    near
  2655.         push    es
  2656.         mov    si,data_92
  2657.         mov    es,data_91
  2658.         mov    di,data_4e
  2659.         mov    cx,6
  2660.         rep    movsw            ; Rep when cx >0 Mov [si] to es:[di]
  2661.         pop    es
  2662.         retn
  2663. sub_44        endp
  2664.  
  2665.  
  2666. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2667. ;                   SUBROUTINE
  2668. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2669.  
  2670. sub_45        proc    near
  2671.         call    sub_28
  2672.         jnc    loc_220            ; Jump if carry=0
  2673.         retn
  2674. loc_220:
  2675.         call    sub_43
  2676.         retn
  2677. sub_45        endp
  2678.  
  2679.  
  2680. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2681. ;                   SUBROUTINE
  2682. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2683.  
  2684. sub_46        proc    near
  2685.         call    sub_28
  2686.         jnc    loc_221            ; Jump if carry=0
  2687.         clc                ; Clear carry flag
  2688.         retn
  2689. loc_221:
  2690.         cmp    data_187,6666h
  2691.         je    loc_222            ; Jump if equal
  2692.         mov    data_92,3CEh
  2693.         mov    ah,data_65
  2694.         call    sub_47
  2695.         mov    byte ptr data_184+26h,al    ; ('')
  2696.         mov    byte ptr data_184+28h,ah    ; ('')
  2697.         call    sub_43
  2698.         retn
  2699. loc_222:
  2700.         cmp    data_92,3AAh
  2701.         jne    loc_ret_223        ; Jump if not equal
  2702.         mov    data_92,0D5h
  2703.         call    sub_44
  2704.  
  2705. loc_ret_223:
  2706.         retn
  2707. sub_46        endp
  2708.  
  2709.  
  2710. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2711. ;                   SUBROUTINE
  2712. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2713.  
  2714. sub_47        proc    near
  2715.         cmp    ah,0Ah
  2716.         jl    loc_226            ; Jump if <
  2717.         mov    al,31h            ; '1'
  2718. loc_224:
  2719.         sub    ah,0Ah
  2720.         cmp    ah,0Ah
  2721.         jl    loc_225            ; Jump if <
  2722.         add    al,1
  2723.         jmp    short loc_224
  2724. loc_225:
  2725.         or    ah,30h            ; '0'
  2726.         retn
  2727. loc_226:
  2728.         or    ah,30h            ; '0'
  2729.         mov    al,20h            ; ' '
  2730.         retn
  2731. sub_47        endp
  2732.  
  2733.  
  2734. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2735. ;                   SUBROUTINE
  2736. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2737.  
  2738. sub_48        proc    near
  2739.         cld                ; Clear direction
  2740.         mov    di,offset 14Dh
  2741. loc_227:
  2742.         mov    al,data_65
  2743.         stosb                ; Store al to es:[di]
  2744.         mov    al,data_64
  2745.         stosb                ; Store al to es:[di]
  2746.         mov    al,data_66
  2747.         stosb                ; Store al to es:[di]
  2748.         mov    al,2
  2749.         stosb                ; Store al to es:[di]
  2750.         inc    data_66
  2751.         mov    al,data_66
  2752.         cmp    al,data_56
  2753.         jle    loc_227            ; Jump if < or =
  2754.         mov    data_66,1
  2755.         retn
  2756. sub_48        endp
  2757.  
  2758.  
  2759. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2760. ;                   SUBROUTINE
  2761. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2762.  
  2763. sub_49        proc    near
  2764.         pop    ax
  2765.         mov    word ptr ds:[221h],ax
  2766.         mov    data_82,21E2h
  2767.         mov    al,byte ptr ds:[21Ah]
  2768.         mov    data_66,al
  2769.         mov    data_68,28E9h
  2770.         mov    data_67,1FFh
  2771.         mov    data_69,4Ah        ; 'J'
  2772.         mov    data_70,0C5h
  2773.         mov    data_85,27F1h
  2774.         call    sub_75
  2775.         mov    data_82,220Dh
  2776.         mov    ax,word ptr ds:[242Ch]
  2777.         mov    cl,byte ptr ds:[21Ah]
  2778.         add    cl,al
  2779.         cmp    cl,data_56
  2780.         jle    loc_228            ; Jump if < or =
  2781.         inc    data_64
  2782.         sub    cl,data_56
  2783. loc_228:
  2784.         mov    data_66,cl
  2785.         call    sub_75
  2786.         inc    byte ptr ds:[21Ah]
  2787.         jmp    word ptr ds:[221h]
  2788.  
  2789. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2790.  
  2791. sub_50:
  2792.         mov    si,offset data_220
  2793.         mov    cx,word ptr ds:[21Dh]
  2794.         inc    cx
  2795.         sub    cx,si
  2796.         jbe    loc_229            ; Jump if below or =
  2797.         mov    di,offset data_214
  2798.         cld                ; Clear direction
  2799.         repne    movsb            ; Rep zf=0+cx >0 Mov [si] to es:[di]
  2800.         xor    al,al            ; Zero register
  2801.         mov    cx,1Bh
  2802.         mov    di,offset data_220
  2803.         repne    stosb            ; Rep zf=0+cx >0 Store al to es:[di]
  2804. loc_229:
  2805.         add    word ptr ds:[21Fh],200h
  2806.         mov    word ptr ds:[21Dh],0
  2807.         retn
  2808. sub_49        endp
  2809.  
  2810.  
  2811. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2812. ;                   SUBROUTINE
  2813. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2814.  
  2815. sub_51        proc    near
  2816.         mov    al,data_65
  2817.         dec    al
  2818.         cbw                ; Convrt byte to word
  2819.         mov    bl,4
  2820.         div    bl            ; al, ah rem = ax/reg
  2821.         mov    cl,ah
  2822.         cbw                ; Convrt byte to word
  2823.         mov    di,ax
  2824.         rol    cl,1            ; Rotate
  2825.         add    cl,data_64
  2826.         mov    al,80h
  2827.         ror    al,cl            ; Rotate
  2828.         or    byte ptr ds:[139h][di],al
  2829.         retn
  2830. sub_51        endp
  2831.  
  2832.  
  2833. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2834. ;                   SUBROUTINE
  2835. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2836.  
  2837. sub_52        proc    near
  2838.         mov    data_65,0
  2839.         mov    data_64,0
  2840.         mov    data_66,1
  2841.         mov    data_94,0
  2842.         mov    data_63,0
  2843.         mov    data_59,0F6h
  2844.         retn
  2845. sub_52        endp
  2846.  
  2847.  
  2848. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2849. ;                   SUBROUTINE
  2850. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2851.  
  2852. sub_53        proc    near
  2853.         xor    al,al            ; Zero register
  2854.         mov    cx,200h
  2855.         mov    di,offset data_214
  2856.         cld                ; Clear direction
  2857.         repne    stosb            ; Rep zf=0+cx >0 Store al to es:[di]
  2858.         retn
  2859. sub_53        endp
  2860.  
  2861.         mov    di,data_100
  2862.         mov    ax,0D1BAh
  2863.         cld                ; Clear direction
  2864.         stosw                ; Store ax to es:[di]
  2865.         stosw                ; Store ax to es:[di]
  2866.         mov    ax,data_54
  2867.         stosw                ; Store ax to es:[di]
  2868.         mov    data_100,di
  2869.         inc    data_95
  2870.         inc    data_99
  2871.         retn
  2872.  
  2873. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2874. ;                   SUBROUTINE
  2875. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2876.  
  2877. sub_54        proc    near
  2878.         mov    word ptr data_98,0
  2879.         mov    si,offset 139h
  2880.         cld                ; Clear direction
  2881. loc_230:
  2882.         lodsb                ; String [si] to al
  2883.         mov    cl,4
  2884. loc_231:
  2885.         mov    ah,al
  2886.         and    ah,3
  2887.         cmp    ah,3
  2888.         je    loc_232            ; Jump if equal
  2889.         cmp    ah,0
  2890.         je    loc_233            ; Jump if equal
  2891.         mov    bl,data_56
  2892.         call    sub_57
  2893.         jmp    short loc_233
  2894.         db    90h
  2895. loc_232:
  2896.         mov    bl,data_56
  2897.         shl    bl,1            ; Shift w/zeros fill
  2898.         call    sub_57
  2899. loc_233:
  2900.         dec    cl
  2901.         jz    loc_234            ; Jump if zero
  2902.         shr    al,1            ; Shift w/zeros fill
  2903.         shr    al,1            ; Shift w/zeros fill
  2904.         jmp    short loc_231
  2905. loc_234:
  2906.         cmp    si,14Dh
  2907.         jl    loc_230            ; Jump if <
  2908.         retn
  2909. sub_54        endp
  2910.  
  2911.  
  2912. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2913. ;                   SUBROUTINE
  2914. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2915.  
  2916. sub_55        proc    near
  2917.         push    cx
  2918.         mov    al,byte ptr ds:[2423h]
  2919.         cbw                ; Convrt byte to word
  2920.         mov    bx,ax
  2921.         mov    al,data_53
  2922.         cbw                ; Convrt byte to word
  2923.         add    ax,word ptr ds:[223h]
  2924.         xor    dx,dx            ; Zero register
  2925.         div    bx            ; ax,dx rem=dx:ax/reg
  2926.         call    sub_59
  2927.         xor    dx,dx            ; Zero register
  2928.         mov    bx,2
  2929.         div    bx            ; ax,dx rem=dx:ax/reg
  2930.         call    sub_58
  2931.         mov    bx,3
  2932.         mul    bx            ; dx:ax = reg * ax
  2933.         add    ax,3
  2934.         add    ax,cx
  2935.         pop    cx
  2936.         retn
  2937. sub_55        endp
  2938.  
  2939.  
  2940. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2941. ;                   SUBROUTINE
  2942. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2943.  
  2944. sub_56        proc    near
  2945.         mov    ah,data_95
  2946.         inc    ah
  2947.         call    sub_47
  2948.         mov    data_190,ax
  2949.         retn
  2950. sub_56        endp
  2951.  
  2952.  
  2953. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2954. ;                   SUBROUTINE
  2955. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2956.  
  2957. sub_57        proc    near
  2958.         xor    bh,bh            ; Zero register
  2959.         cmp    data_56,9
  2960.         jne    loc_235            ; Jump if not equal
  2961.         clc                ; Clear carry flag
  2962.         rcr    bx,1            ; Rotate thru carry
  2963.         adc    bx,0
  2964. loc_235:
  2965.         add    word ptr data_98,bx
  2966.         retn
  2967. sub_57        endp
  2968.  
  2969.  
  2970. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2971. ;                   SUBROUTINE
  2972. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2973.  
  2974. sub_58        proc    near
  2975.         cmp    dx,0
  2976.         je    loc_236            ; Jump if equal
  2977.         mov    cx,1
  2978.         retn
  2979. loc_236:
  2980.         mov    cx,dx
  2981.         retn
  2982. sub_58        endp
  2983.  
  2984.  
  2985. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2986. ;                   SUBROUTINE
  2987. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2988.  
  2989. sub_59        proc    near
  2990.         test    al,1
  2991.         jz    loc_237            ; Jump if zero
  2992.         mov    word ptr ds:[229h],2
  2993.         retn
  2994. loc_237:
  2995.         mov    word ptr ds:[229h],0
  2996.         retn
  2997. sub_59        endp
  2998.  
  2999.  
  3000. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3001. ;                   SUBROUTINE
  3002. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3003.  
  3004. sub_60        proc    near
  3005.         mov    di,offset 139h
  3006.         xor    al,al            ; Zero register
  3007.         mov    cx,14h
  3008.         cld                ; Clear direction
  3009.         repne    stosb            ; Rep zf=0+cx >0 Store al to es:[di]
  3010.         retn
  3011. sub_60        endp
  3012.  
  3013.  
  3014. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3015. ;                   SUBROUTINE
  3016. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3017.  
  3018. sub_61        proc    near
  3019.         mov    si,data_31
  3020.         mov    bx,offset data_41
  3021.         mov    al,[bx+si]
  3022.         mov    byte ptr ds:[2423h],al
  3023.         mov    bx,offset data_47
  3024.         mov    al,[bx+si]
  3025.         mov    byte ptr ds:[242Bh],al
  3026.         mov    bx,offset data_39
  3027.         mov    al,[bx+si]
  3028.         mov    data_71,al
  3029.         mov    bx,offset data_43
  3030.         mov    al,[bx+si]
  3031.         mov    data_55,al
  3032.         mov    bx,offset data_44
  3033.         mov    al,[bx+si]
  3034.         mov    data_56,al
  3035.         and    ax,0FFh
  3036.         mov    word ptr ds:[242Eh],ax
  3037.         mov    bx,offset data_45
  3038.         mov    al,[bx+si]
  3039.         mov    data_57,al
  3040.         mov    bx,offset data_46
  3041.         mov    al,[bx+si]
  3042.         mov    data_58,al
  3043.         mov    bx,offset data_52
  3044.         mov    al,[bx+si]
  3045.         mov    data_53,al
  3046.         shl    si,1            ; Shift w/zeros fill
  3047.         mov    bx,offset data_48
  3048.         mov    ax,[bx+si]
  3049.         mov    word ptr ds:[2427h],ax
  3050.         mov    bx,offset data_40
  3051.         mov    ax,[bx+si]
  3052.         mov    data_61,ax
  3053.         mov    bx,offset data_37
  3054.         mov    ax,[bx+si]
  3055.         mov    word ptr data_60,ax
  3056.         mov    bx,69h
  3057.         mov    ax,[bx+si]
  3058.         mov    word ptr ds:[2429h],ax
  3059.         mov    bx,offset data_50
  3060.         mov    ax,[bx+si]
  3061.         mov    word ptr ds:[242Ch],ax
  3062.         mov    bx,offset data_51
  3063.         mov    ax,[bx+si]
  3064.         mov    data_54,ax
  3065.         mov    ah,4
  3066.         int    1Ah            ; Real time clock   ah=func 04h
  3067.                         ;  get date  cx=year, dx=mon/day
  3068.         mov    word ptr ds:[243Fh],dx
  3069.         cmp    data_31,0
  3070.         jne    loc_238            ; Jump if not equal
  3071.         mov    word ptr ds:[216h],143h
  3072.         retn
  3073. loc_238:
  3074.         mov    word ptr ds:[216h],14Dh
  3075.         retn
  3076. sub_61        endp
  3077.  
  3078.         jmp    short loc_239
  3079.         nop
  3080.         inc    dx
  3081.         inc    si
  3082.         dec    di
  3083.         push    dx
  3084.         dec    bp
  3085.         inc    cx
  3086.         push    sp
  3087.         and    [bx+si],al
  3088.         add    al,[bx+si]
  3089.         add    [bx+si],ax
  3090.         add    al,[bx+si]
  3091.         add    [bx+si],al
  3092.         add    [bx+si],al
  3093.         add    [bx+si],al
  3094.         add    [bx+si],al
  3095.         add    al,[bx+si]
  3096.         add    [bx+si],al
  3097.         add    [bx+si],al
  3098.         add    [bx+si],al
  3099.         add    [bx+si],al
  3100.         add    [bx+si],al
  3101.         sub    [bx+si],ax
  3102.         add    [bx+si],al
  3103.         add    [bp+4Fh],cl
  3104.         db    ' NAME    FAT12   ', 0Dh, 0Ah, ' '
  3105.         db    'Non-System Disk ...', 0Dh, 0Ah, ' '
  3106.         db    'Replace And Press Any Key When R'
  3107.         db    'eady...', 0Dh, 0Ah, 0
  3108. loc_239:
  3109.         xor    ax,ax            ; Zero register
  3110.         cli                ; Disable interrupts
  3111.         mov    ss,ax
  3112.         mov    sp,7C00h
  3113.         sti                ; Enable interrupts
  3114.         push    cs
  3115.         pop    ds
  3116.         mov    si,data_234e
  3117.         cld                ; Clear direction
  3118. loc_240:
  3119.         lodsb                ; String [si] to al
  3120.         test    al,al
  3121.         jz    loc_241            ; Jump if zero
  3122.         mov    ah,0Eh
  3123.         xor    bx,bx            ; Zero register
  3124.         int    10h            ; Video display   ah=functn 0Eh
  3125.                         ;  write char al, teletype mode
  3126.         jmp    short loc_240
  3127. loc_241:
  3128.         mov    ah,0
  3129.         int    16h            ; Keyboard i/o  ah=function 00h
  3130.                         ;  get keybd char in al, ah=scan
  3131.         int    19h            ; Bootstrap loader
  3132.         db    347 dup (0)
  3133.         db     55h,0AAh
  3134.  
  3135. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3136. ;                   SUBROUTINE
  3137. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3138.  
  3139. sub_62        proc    near
  3140.         mov    byte ptr ds:[22Fh],1
  3141.         mov    ds,data_25
  3142.         mov    al,0FFh
  3143.         mov    ds:dsk_motor_tmr_,al
  3144.         mov    al,ds:dsk_motor_stat_
  3145.         and    al,0Fh
  3146.         push    cs
  3147.         pop    ds
  3148.         cmp    al,0
  3149.         je    loc_242            ; Jump if equal
  3150.         retn
  3151. loc_242:
  3152.         mov    cl,data_29
  3153.         mov    al,10h
  3154.         shl    al,cl            ; Shift w/zeros fill
  3155.         mov    ah,al
  3156.         or    al,cl
  3157.         or    al,0Ch
  3158.         mov    dx,3F2h
  3159.         out    dx,al            ; port 3F2h, dsk0 contrl output
  3160.         mov    cl,4
  3161.         rol    ah,cl            ; Rotate
  3162.         mov    ds,data_25
  3163.         mov    ds:dsk_motor_stat_,ah
  3164.         push    cs
  3165.         pop    ds
  3166.         mov    byte ptr ds:[22Dh],2
  3167.         call    sub_7
  3168.         retn
  3169. sub_62        endp
  3170.  
  3171.  
  3172. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3173. ;                   SUBROUTINE
  3174. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3175.  
  3176. sub_63        proc    near
  3177.         pop    ax
  3178.         mov    data_86,ax
  3179.         call    sub_62
  3180.         call    sub_67
  3181.         jmp    short loc_243
  3182.         db    90h
  3183.  
  3184. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3185.  
  3186. sub_64:
  3187.         pop    ax
  3188.         mov    data_86,ax
  3189.         mov    data_63,0
  3190.         call    sub_62
  3191.         call    sub_66
  3192. loc_243:
  3193.         call    sub_79
  3194.         call    sub_68
  3195.         jc    loc_244            ; Jump if carry Set
  3196.         jmp    data_86
  3197. loc_244:
  3198.         clc                ; Clear carry flag
  3199.         jmp    loc_123
  3200. sub_63        endp
  3201.  
  3202.  
  3203. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3204. ;                   SUBROUTINE
  3205. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3206.  
  3207. sub_65        proc    near
  3208.         pop    ax
  3209.         mov    data_88,ax
  3210.         call    sub_64
  3211.         test    data_73,0C0h
  3212.         jz    loc_245            ; Jump if zero
  3213.         call    sub_64
  3214.         test    data_73,0C0h
  3215.         jz    loc_245            ; Jump if zero
  3216.         jmp    loc_123
  3217. loc_245:
  3218.         mov    al,data_65
  3219.         cmp    data_31,0
  3220.         jne    loc_246            ; Jump if not equal
  3221.         shl    al,1            ; Shift w/zeros fill
  3222. loc_246:
  3223.         mov    data_63,al
  3224.         call    sub_63
  3225.         jmp    data_88
  3226.  
  3227. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3228.  
  3229. sub_66:
  3230.         mov    ah,7
  3231.         call    sub_71
  3232.         mov    ah,data_29
  3233.         call    sub_71
  3234.         retn
  3235. sub_65        endp
  3236.  
  3237.  
  3238. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3239. ;                   SUBROUTINE
  3240. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3241.  
  3242. sub_67        proc    near
  3243.         mov    ah,0Fh
  3244.         call    sub_71
  3245.         mov    ah,data_29
  3246.         call    sub_71
  3247.         mov    ah,data_63
  3248.         call    sub_71
  3249.         retn
  3250. sub_67        endp
  3251.  
  3252.  
  3253. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3254. ;                   SUBROUTINE
  3255. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3256.  
  3257. sub_68        proc    near
  3258.         mov    ah,8
  3259.         call    sub_71
  3260.         call    sub_70
  3261.         mov    data_73,al
  3262.         call    sub_70
  3263.         mov    data_72,al
  3264.         retn
  3265. sub_68        endp
  3266.  
  3267.  
  3268. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3269. ;                   SUBROUTINE
  3270. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3271.  
  3272. sub_69        proc    near
  3273.         call    sub_70
  3274.         mov    data_73,al
  3275.         call    sub_70
  3276.         mov    data_74,al
  3277.         call    sub_70
  3278.         mov    data_75,al
  3279.         call    sub_70
  3280.         mov    data_77,al
  3281.         call    sub_70
  3282.         mov    data_78,al
  3283.         call    sub_70
  3284.         mov    data_79,al
  3285.         call    sub_70
  3286.         mov    data_80,al
  3287.         retn
  3288. sub_69        endp
  3289.  
  3290.  
  3291. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3292. ;                   SUBROUTINE
  3293. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3294.  
  3295. sub_70        proc    near
  3296.         mov    dx,3F4h
  3297.         xor    cx,cx            ; Zero register
  3298.  
  3299. locloop_247:
  3300.         in    al,dx            ; port 3F4h, dsk0 cntrlr status
  3301.         and    al,0C0h
  3302.         cmp    al,0C0h
  3303.         je    loc_248            ; Jump if equal
  3304.         loop    locloop_247        ; Loop if cx > 0
  3305.  
  3306.         pop    ax
  3307.         stc                ; Set carry flag
  3308.         retn
  3309. loc_248:
  3310.         inc    dx
  3311.         in    al,dx            ; port 3F5h, dsk0 controlr data
  3312.         clc                ; Clear carry flag
  3313.         retn
  3314. sub_70        endp
  3315.  
  3316.  
  3317. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3318. ;                   SUBROUTINE
  3319. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3320.  
  3321. sub_71        proc    near
  3322.         mov    dx,3F4h
  3323.         xor    cx,cx            ; Zero register
  3324.  
  3325. locloop_249:
  3326.         in    al,dx            ; port 3F4h, dsk0 cntrlr status
  3327.         and    al,0C0h
  3328.         cmp    al,80h
  3329.         je    loc_250            ; Jump if equal
  3330.         loop    locloop_249        ; Loop if cx > 0
  3331.  
  3332.         pop    ax
  3333.         stc                ; Set carry flag
  3334.         retn
  3335. loc_250:
  3336.         mov    al,ah
  3337.         inc    dx
  3338.         out    dx,al            ; port 3F5h, dsk0 controlr data
  3339.         clc                ; Clear carry flag
  3340.         retn
  3341. sub_71        endp
  3342.  
  3343.  
  3344. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3345. ;                   SUBROUTINE
  3346. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3347.  
  3348. sub_72        proc    near
  3349.         mov    dx,3F7h
  3350.         mov    al,data_71
  3351.         out    dx,al            ; port 3F7h ??I/O Non-standard
  3352.         retn
  3353. sub_72        endp
  3354.  
  3355.  
  3356. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3357. ;                   SUBROUTINE
  3358. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3359.  
  3360. sub_73        proc    near
  3361.         mov    al,2
  3362.         out    0Ch,al            ; port 0Ch, DMA-1 clr byte ptr
  3363.         jmp    short $+2        ; delay for I/O
  3364.         mov    al,ah
  3365.         out    0Bh,al            ; port 0Bh, DMA-1 mode reg
  3366.         mov    bx,data_68
  3367.         push    cs
  3368.         pop    ax
  3369.         mov    cl,4
  3370.         rol    ax,cl            ; Rotate
  3371.         mov    ch,al
  3372.         and    al,0F0h
  3373.         add    ax,bx
  3374.         jnc    loc_251            ; Jump if carry=0
  3375.         inc    ch
  3376. loc_251:
  3377.         out    4,al            ; port 4, DMA-1 bas&add ch 2
  3378.         jmp    short $+2        ; delay for I/O
  3379.         mov    al,ah
  3380.         out    4,al            ; port 4, DMA-1 bas&add ch 2
  3381.         jmp    short $+2        ; delay for I/O
  3382.         mov    al,ch
  3383.         and    al,0Fh
  3384.         out    81h,al            ; port 81h, DMA page reg ch 2
  3385.         mov    ax,data_67
  3386.         out    5,al            ; port 5, DMA-1 bas&cnt ch 2
  3387.         jmp    short $+2        ; delay for I/O
  3388.         mov    al,ah
  3389.         out    5,al            ; port 5, DMA-1 bas&cnt ch 2
  3390.         jmp    short $+2        ; delay for I/O
  3391.         mov    al,2
  3392.         out    0Ah,al            ; port 0Ah, DMA-1 mask reg bit
  3393.         retn
  3394. sub_73        endp
  3395.  
  3396.  
  3397. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3398. ;                   SUBROUTINE
  3399. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3400.  
  3401. sub_74        proc    near
  3402.         pop    ax
  3403.         mov    data_86,ax
  3404.         mov    data_68,28E9h
  3405.         mov    data_67,1FFh
  3406.         mov    data_69,46h        ; 'F'
  3407.         mov    data_70,0E6h
  3408.         call    sub_62
  3409.         call    sub_72
  3410.         mov    ah,data_69
  3411.         call    sub_73
  3412.         call    sub_76
  3413.         jc    loc_252            ; Jump if carry Set
  3414.         call    sub_79
  3415.         call    sub_69
  3416.         jc    loc_252            ; Jump if carry Set
  3417.         jmp    data_86
  3418. loc_252:
  3419.         clc                ; Clear carry flag
  3420.         call    sub_7
  3421.         jmp    loc_123
  3422. sub_74        endp
  3423.  
  3424.  
  3425. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3426. ;                   SUBROUTINE
  3427. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3428.  
  3429. sub_75        proc    near
  3430.         pop    ax
  3431.         mov    data_86,ax
  3432.         call    sub_62
  3433.         call    sub_72
  3434.         mov    ah,data_69
  3435.         call    sub_73
  3436.         call    data_85
  3437.         jc    loc_253            ; Jump if carry Set
  3438.         call    sub_79
  3439.         call    sub_69
  3440.         jc    loc_253            ; Jump if carry Set
  3441.         jmp    data_86
  3442. loc_253:
  3443.         clc                ; Clear carry flag
  3444.         call    sub_7
  3445.         jmp    loc_123
  3446. sub_75        endp
  3447.  
  3448.  
  3449. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3450. ;                   SUBROUTINE
  3451. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3452.  
  3453. sub_76        proc    near
  3454.         mov    ah,data_70
  3455.         call    sub_71
  3456.         mov    ah,data_29
  3457.         cmp    data_64,0
  3458.         je    loc_254            ; Jump if equal
  3459.         or    ah,4
  3460. loc_254:
  3461.         call    sub_71
  3462.         mov    ah,data_65
  3463.         call    sub_71
  3464.         mov    ah,data_64
  3465.         call    sub_71
  3466.         mov    ah,data_66
  3467.         call    sub_71
  3468.         mov    ah,2
  3469.         call    sub_71
  3470.         mov    ah,data_56
  3471.         call    sub_71
  3472.         mov    ah,data_57
  3473.         call    sub_71
  3474.         mov    ah,0FFh
  3475.         call    sub_71
  3476.         retn
  3477. sub_76        endp
  3478.  
  3479.         mov    ah,4Dh            ; 'M'
  3480.         call    sub_71
  3481.         mov    ah,data_29
  3482.         cmp    data_64,0
  3483.         je    loc_255            ; Jump if equal
  3484.         or    ah,4
  3485. loc_255:
  3486.         call    sub_71
  3487.         mov    ah,2
  3488.         call    sub_71
  3489.         mov    ah,data_56
  3490.         call    sub_71
  3491.         mov    ah,data_58
  3492.         call    sub_71
  3493.         mov    ah,data_59
  3494.         call    sub_71
  3495.         retn
  3496.  
  3497. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3498. ;                   SUBROUTINE
  3499. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3500.  
  3501. sub_77        proc    near
  3502.         mov    ah,4
  3503.         call    sub_71
  3504.         mov    ah,data_29
  3505.         call    sub_71
  3506.         call    sub_70
  3507.         mov    data_76,al
  3508.         retn
  3509. sub_77        endp
  3510.  
  3511.  
  3512. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3513. ;                   SUBROUTINE
  3514. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3515.  
  3516. sub_78        proc    near
  3517.         pop    ax
  3518.         mov    data_87,ax
  3519.         call    sub_48
  3520.         mov    ax,data_61
  3521.         mov    data_67,ax
  3522.         mov    data_68,14Dh
  3523.         mov    data_69,4Ah        ; 'J'
  3524.         mov    data_85,2837h
  3525.         call    sub_75
  3526.         test    data_73,0C0h
  3527.         jnz    loc_256            ; Jump if not zero
  3528.         jmp    data_87
  3529. loc_256:
  3530.         test    data_74,2
  3531.         jz    loc_257            ; Jump if zero
  3532.         jmp    loc_86
  3533. loc_257:
  3534.         cmp    data_94,2
  3535.         jne    loc_258            ; Jump if not equal
  3536.         mov    data_94,0
  3537.         jmp    loc_93
  3538. loc_258:
  3539.         inc    data_94
  3540.         call    sub_65
  3541.         test    data_73,0C0h
  3542.         jnz    loc_259            ; Jump if not zero
  3543.         jmp    data_82
  3544. loc_259:
  3545.         jmp    loc_123
  3546. sub_78        endp
  3547.  
  3548.  
  3549. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3550. ;                   SUBROUTINE
  3551. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3552.  
  3553. sub_79        proc    near
  3554.         mov    cx,18h
  3555.  
  3556. locloop_260:
  3557.         call    sub_7
  3558.         cmp    byte ptr ds:[22Fh],0
  3559.         jne    loc_261            ; Jump if not equal
  3560.         retn
  3561. loc_261:
  3562.         loop    locloop_260        ; Loop if cx > 0
  3563.  
  3564.         pop    ax
  3565.         jmp    loc_123
  3566. sub_79        endp
  3567.  
  3568. data_214    db    0
  3569. data_215    dw    0
  3570.         db    8 dup (0)
  3571. data_217    dw    0
  3572.         db    26 dup (0)
  3573. data_218    dw    0
  3574. data_219    dw    0
  3575.         db    469 dup (0)
  3576. data_220    db    0
  3577.         db    154 dup (0)
  3578. data_221    db    0Dh, 0Ah, ' Mem Resident Format A'
  3579.         db    'lready Installed', 0Dh, 0Ah, 'Al'
  3580.         db    't + Left Shift + Right Shift Wil'
  3581.         db    'l Activate', 0Dh, 0Ah, '$'
  3582. data_222    db    0Dh, 0Ah, 'Background Formatter I'
  3583.         db    's Installed', 0Dh, 0Ah, 'Alt + L'
  3584.         db    'eft Shift + Right Shift Will Act'
  3585.         db    'ivate', 0Dh, 0Ah, '$'
  3586. data_223    db    0Dh, 0Ah, 'No Diskette Drive Conn'
  3587.         db    'ect', 0Dh, 0Ah, 'Program Termina'
  3588.         db    'ted !', 0Dh, 0Ah, '$'
  3589.         db    'There Are '
  3590. data_224    db    0
  3591.         db    ' Diskette Drives Connected'
  3592.         db    0
  3593. data_225    db    0
  3594.         db     20h,0C4h
  3595.         db    14 dup (0C4h)
  3596. data_227    db    ' ', 0
  3597.         db    'Is This Configuration Correct ? '
  3598.         db    '[Y]', 0
  3599.         db    'How Many Diskette Drives ( Not I'
  3600.         db    'nclude Fixed Disk ) ?', 0
  3601.         db    'DRIVE ', 0
  3602.         db    ' ( 0 - 360K, 1 - 1.2M, 2 - 720K,'
  3603.         db    ' 3 - 1.44M ) ?', 0
  3604. loc_262:
  3605.         push    cs
  3606.         pop    ds
  3607.         push    cs
  3608.         pop    es
  3609.         call    sub_86
  3610.         mov    word ptr ds:[1E2h],cs
  3611.         mov    word ptr ds:[1E4h],cs
  3612.         mov    word ptr ds:[1DAh],cs
  3613.         mov    word ptr ds:[1E0h],cs
  3614.         mov    word ptr data_24,0EBFEh
  3615.         cli                ; Disable interrupts
  3616.         mov    word ptr ds:[1E6h],ss
  3617.         mov    word ptr ds:[1E8h],sp
  3618.         push    cs
  3619.         pop    ss
  3620.         mov    sp,2B84h
  3621.         mov    ax,202h
  3622.         push    ax
  3623.         push    cs
  3624.         mov    ax,data_81
  3625.         push    ax
  3626.         mov    word ptr ds:[1DCh],sp
  3627.         mov    ss,word ptr ds:[1E6h]
  3628.         mov    sp,word ptr ds:[1E8h]
  3629.         sti                ; Enable interrupts
  3630.         call    sub_80
  3631.         call    sub_23
  3632.         call    sub_88
  3633.         call    sub_24
  3634.         mov    al,0Eh
  3635.         mov    si,19Dh
  3636.         mov    dx,12CCh
  3637.         call    sub_87
  3638.         mov    al,13h
  3639.         mov    si,1A1h
  3640.         mov    dx,12E6h
  3641.         call    sub_87
  3642.         mov    al,9
  3643.         mov    si,199h
  3644.         mov    dx,127Ah
  3645.         call    sub_87
  3646.         mov    al,8
  3647.         mov    si,195h
  3648.         mov    dx,11E0h
  3649.         call    sub_87
  3650.         mov    dx,offset data_222    ; ('')
  3651.         mov    ah,9
  3652.         int    21h            ; DOS Services  ah=function 09h
  3653.                         ;  display char string at ds:dx
  3654.         mov    al,0
  3655.         mov    dx,2B84h
  3656.         mov    cl,4
  3657.         shr    dx,cl            ; Shift w/zeros fill
  3658.         add    dx,11h
  3659.         mov    ah,31h            ; '1'
  3660.         int    21h            ; DOS Services  ah=function 31h
  3661.                         ;  terminate & stay resident
  3662.                         ;   al=return code,dx=paragraphs
  3663.  
  3664. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3665. ;                   SUBROUTINE
  3666. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3667.  
  3668. sub_80        proc    near
  3669.         push    es
  3670.         mov    es,cs:data_25
  3671.         mov    dx,es:video_port_
  3672.         add    dx,6
  3673.         mov    cs:data_90,dx
  3674.         pop    es
  3675.         int    11h            ; Put equipment bits in ax
  3676.         mov    bh,al
  3677.         and    bh,30h            ; '0'
  3678.         mov    data_91,0B800h
  3679.         cmp    bh,30h            ; '0'
  3680.         jne    loc_263            ; Jump if not equal
  3681.         mov    data_91,0B000h
  3682. loc_263:
  3683.         mov    bh,al
  3684.         and    bh,1
  3685.         and    ax,0C0h
  3686.         shl    ax,1            ; Shift w/zeros fill
  3687.         shl    ax,1            ; Shift w/zeros fill
  3688.         add    ah,bh
  3689.         cmp    ah,0
  3690.         jne    loc_264            ; Jump if not equal
  3691.         mov    dx,offset data_223    ; ('')
  3692.         mov    ah,9
  3693.         int    21h            ; DOS Services  ah=function 09h
  3694.                         ;  display char string at ds:dx
  3695.         jmp    loc_277
  3696. loc_264:
  3697.         mov    al,ah
  3698.         cmp    al,3
  3699.         jl    loc_265            ; Jump if <
  3700.         mov    al,2
  3701. loc_265:
  3702.         mov    data_28,al
  3703.         or    al,30h            ; '0'
  3704.         mov    data_224,al
  3705.         call    sub_81
  3706.         retn
  3707.  
  3708. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3709.  
  3710. sub_81:
  3711.         push    ax
  3712.         push    es
  3713.         push    di
  3714.         mov    bx,0Dh
  3715.         mov    dx,0
  3716. loc_266:
  3717.         mov    si,dx
  3718.         push    ax
  3719.         push    bx
  3720.         push    dx
  3721.         mov    ah,8
  3722.         int    13h            ; Disk  dl=drive a  ah=func 08h
  3723.                         ;  get drive parameters, bl=type
  3724.                         ;   cx=cylinders, dh=max heads
  3725.                         ;   es:di= ptr to drive table
  3726.         jc    loc_267            ; Jump if carry Set
  3727.         mov    al,bl
  3728.         dec    al
  3729.         pop    dx
  3730.         pop    bx
  3731.         mov    [bx+si],al
  3732.         pop    ax
  3733.         dec    ah
  3734.         jz    loc_268            ; Jump if zero
  3735.         inc    dx
  3736.         jmp    short loc_266
  3737. loc_267:
  3738.         add    sp,6
  3739. loc_268:
  3740.         pop    di
  3741.         pop    es
  3742.         pop    ax
  3743.         retn
  3744.  
  3745. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3746.  
  3747. sub_82:
  3748.         mov    al,41h            ; 'A'
  3749.         mov    dx,0C1Dh
  3750.         mov    di,0
  3751.         call    sub_85
  3752.         retn
  3753.  
  3754. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3755.  
  3756. sub_83:
  3757.         call    sub_82
  3758.         call    sub_84
  3759.         retn
  3760.  
  3761. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3762.  
  3763. sub_84:
  3764.         mov    al,42h            ; 'B'
  3765.         mov    dx,0E1Dh
  3766.         mov    di,1
  3767.         call    sub_85
  3768.         retn
  3769.  
  3770. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3771.  
  3772. sub_85:
  3773.         mov    data_225,al
  3774.         mov    si,2C8Bh
  3775.         call    sub_14
  3776.         mov    al,[di+0Dh]
  3777.         nop                ;*ASM fixup - displacement
  3778.         cbw                ; Convrt byte to word
  3779.         add    ax,ax
  3780.         mov    si,ax
  3781.         mov    bx,offset data_32
  3782.         mov    si,[bx+si]
  3783.         call    sub_15
  3784.         retn
  3785.  
  3786. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3787.  
  3788. sub_86:
  3789.         mov    ah,51h            ; 'Q'
  3790.         int    21h            ; DOS Services  ah=function 51h
  3791.                         ;  get active PSP segment in bx
  3792.                         ;*  undocumented function
  3793.         mov    data_231,bx
  3794.         mov    ax,300Eh
  3795.         mov    data_232,ax
  3796.         xor    ax,ax            ; Zero register
  3797. loc_269:
  3798.         mov    ds,ax
  3799.         xor    si,si            ; Zero register
  3800.         cld                ; Clear direction
  3801.         lodsb                ; String [si] to al
  3802.         cmp    al,4Dh            ; 'M'
  3803.         je    loc_271            ; Jump if equal
  3804. loc_270:
  3805.         push    ds
  3806.         pop    ax
  3807.         inc    ax
  3808.         jmp    short loc_269
  3809. loc_271:
  3810.         push    ds
  3811.         mov    si,data_3e
  3812.         lodsw                ; String [si] to ax
  3813.         pop    bx
  3814.         add    bx,ax
  3815.         inc    bx
  3816.         jc    loc_270            ; Jump if carry Set
  3817.         cmp    cs:data_231,bx
  3818.         jb    loc_270            ; Jump if below
  3819.         push    ds
  3820.         mov    ds,bx
  3821.         cmp    byte ptr ds:data_17e,4Dh    ; 'M'
  3822.         nop                ;*ASM fixup - sign extn byte
  3823.         je    loc_272            ; Jump if equal
  3824.         pop    ds
  3825.         jmp    short loc_270
  3826. loc_272:
  3827.         mov    di,cs:data_232
  3828.         push    cs
  3829.         pop    es
  3830.         mov    bx,ds
  3831.         pop    ds
  3832.         mov    ax,ds
  3833.         stosw                ; Store ax to es:[di]
  3834.         mov    ax,bx
  3835.         stosw                ; Store ax to es:[di]
  3836.         mov    ds,bx
  3837. loc_273:
  3838.         push    ds
  3839.         mov    si,data_3e
  3840.         lodsw                ; String [si] to ax
  3841.         pop    bx
  3842.         add    bx,ax
  3843.         inc    bx
  3844.         mov    ax,bx
  3845.         stosw                ; Store ax to es:[di]
  3846.         mov    ds,bx
  3847.         xor    si,si            ; Zero register
  3848.         lodsb                ; String [si] to al
  3849.         cmp    al,5Ah            ; 'Z'
  3850.         jne    loc_273            ; Jump if not equal
  3851.         xor    ax,ax            ; Zero register
  3852.         stosw                ; Store ax to es:[di]
  3853.         push    cs
  3854.         pop    ds
  3855.         mov    si,di
  3856.         sub    si,6
  3857.         lodsw                ; String [si] to ax
  3858.         mov    data_26,ax
  3859.         lodsw                ; String [si] to ax
  3860.         mov    data_27,ax
  3861.         mov    si,offset data_233
  3862. loc_274:
  3863.         mov    ax,[si]
  3864.         cmp    ax,0
  3865.         je    loc_275            ; Jump if equal
  3866.         mov    es,ax
  3867.         mov    ax,es:data_2e
  3868.         add    ax,10h
  3869.         mov    es,ax
  3870.         mov    di,data_18e
  3871.         cmp    word ptr es:[di],0EBFEh
  3872.         je    loc_276            ; Jump if equal
  3873.         add    si,2
  3874.         jmp    short loc_274
  3875. loc_275:
  3876.         push    cs
  3877.         pop    es
  3878.         retn
  3879. loc_276:
  3880.         mov    dx,offset data_221    ; ('')
  3881.         mov    ah,9
  3882.         int    21h            ; DOS Services  ah=function 09h
  3883.                         ;  display char string at ds:dx
  3884. loc_277:
  3885.         call    sub_11
  3886.         mov    ax,4C00h
  3887.         int    21h            ; DOS Services  ah=function 4Ch
  3888.                         ;  terminate with al=return code
  3889. sub_80        endp
  3890.  
  3891.  
  3892. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3893. ;                   SUBROUTINE
  3894. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3895.  
  3896. sub_87        proc    near
  3897.         push    es
  3898.         push    ax
  3899.         push    si
  3900.         push    dx
  3901.         mov    ah,35h            ; '5'
  3902.         int    21h            ; DOS Services  ah=function 35h
  3903.                         ;  get intrpt vector al in es:bx
  3904.         pop    dx
  3905.         pop    si
  3906.         pop    ax
  3907.         mov    [si],bx
  3908.         mov    [si+2],es
  3909.         mov    ah,25h            ; '%'
  3910.         int    21h            ; DOS Services  ah=function 25h
  3911.                         ;  set intrpt vector al to ds:dx
  3912.         pop    es
  3913.         retn
  3914. sub_87        endp
  3915.  
  3916.  
  3917. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3918. ;                   SUBROUTINE
  3919. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3920.  
  3921. sub_88        proc    near
  3922. loc_278:
  3923.         call    sub_19
  3924.         mov    dh,8
  3925.         mov    dl,17h
  3926.         mov    si,2C65h
  3927.         call    sub_14
  3928.         mov    al,data_28
  3929.         cbw                ; Convrt byte to word
  3930.         dec    al
  3931.         mov    di,ax
  3932.         add    di,di
  3933.         mov    bx,offset data_229
  3934.         call    word ptr [bx+di]    ;*
  3935.         mov    dh,12h
  3936.         mov    dl,18h
  3937.         mov    si,2C9Eh
  3938.         call    sub_14
  3939.         call    sub_13
  3940. loc_279:
  3941.         mov    ah,0
  3942.         int    16h            ; Keyboard i/o  ah=function 00h
  3943.                         ;  get keybd char in al, ah=scan
  3944.         cmp    al,0Dh
  3945.         je    loc_ret_282        ; Jump if equal
  3946.         cmp    al,1Bh
  3947.         jne    loc_280            ; Jump if not equal
  3948.         jmp    short loc_ret_282
  3949.         db    90h
  3950. loc_280:
  3951.         and    al,0DFh
  3952.         cmp    al,59h            ; 'Y'
  3953.         je    loc_ret_282        ; Jump if equal
  3954.         cmp    al,4Eh            ; 'N'
  3955.         je    loc_281            ; Jump if equal
  3956.         call    sub_11
  3957.         jmp    short loc_279
  3958. loc_281:
  3959.         call    sub_89
  3960.  
  3961. loc_ret_282:
  3962.         retn
  3963. sub_88        endp
  3964.  
  3965.  
  3966. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  3967. ;                   SUBROUTINE
  3968. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3969.  
  3970. sub_89        proc    near
  3971.         call    sub_19
  3972.         mov    dh,12h
  3973.         mov    dl,0Eh
  3974.         mov    si,2CC2h
  3975.         call    sub_14
  3976.         call    sub_13
  3977. loc_283:
  3978.         mov    ah,0
  3979.         int    16h            ; Keyboard i/o  ah=function 00h
  3980.                         ;  get keybd char in al, ah=scan
  3981.         cmp    al,31h            ; '1'
  3982.         jge    loc_285            ; Jump if > or =
  3983. loc_284:
  3984.         call    sub_11
  3985.         jmp    short loc_283
  3986. loc_285:
  3987.         cmp    al,32h            ; '2'
  3988.         jg    loc_284            ; Jump if >
  3989.         mov    data_224,al
  3990.         and    al,0Fh
  3991.         mov    data_28,al
  3992.         cbw                ; Convrt byte to word
  3993.         push    ax
  3994.         mov    dh,8
  3995.         mov    dl,17h
  3996.         mov    si,2C65h
  3997.         call    sub_14
  3998.         mov    al,41h            ; 'A'
  3999.         mov    byte ptr data_227+62h,al    ; ('')
  4000.         xor    di,di            ; Zero register
  4001.         mov    bx,0Dh
  4002. loc_286:
  4003.         mov    dh,12h
  4004.         mov    dl,0Eh
  4005.         mov    si,2CF8h
  4006.         call    sub_14
  4007.         call    sub_13
  4008.         mov    al,33h            ; '3'
  4009.         mov    data_102,al
  4010.         mov    data_89,2FCDh
  4011.         call    sub_16
  4012.         mov    [bx+di],al
  4013.         push    bx
  4014.         push    di
  4015.         shl    di,1            ; Shift w/zeros fill
  4016.         mov    bx,offset data_229
  4017.         call    word ptr [bx+di]    ;*
  4018.         pop    di
  4019.         pop    bx
  4020.         inc    di
  4021.         pop    ax
  4022.         cmp    di,ax
  4023.         je    loc_287            ; Jump if equal
  4024.         push    ax
  4025.         inc    byte ptr data_227+62h    ; ('')
  4026.         jmp    short loc_286
  4027. loc_287:
  4028.         pop    ax
  4029.         jmp    loc_278
  4030. sub_89        endp
  4031.  
  4032. data_229    dw    offset sub_82
  4033. data_230    dw    offset sub_83
  4034. data_231    dw    0
  4035. data_232    dw    0
  4036. data_233    dw    100 dup (0)
  4037.  
  4038. seg_a        ends
  4039.  
  4040.  
  4041.  
  4042.         end    start
  4043.